中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 命令行怎么用16进制的字符替换文件内容?change也不行的
作者:
标题: 命令行怎么用16进制的字符替换文件内容?change也不行的 上一主题 | 下一主题
okace
初级用户




积分 130
发帖 15
注册 2004-7-30
状态 离线
『楼 主』:  命令行怎么用16进制的字符替换文件内容?change也不行的

请问如何在命令行,用任意长度的16进制字符,替换任意文件?

我试了change,用 &h 可以替换较短的16进制字符,但是整条命令超过128字符就不能运行了。

其他类型的软件也可以,不一定要dos程序,win程序也可以,只要能支持命令行替换,这样只要一行命令(或多行)就自动替换。

对了,替换的16进制字符长度可能超过1K的。

不知道意思有没有表达清楚。找了一整天了,快晕了。请帮忙!

[ Last edited by okace on 2008-11-4 at 17:41 ]

2008-11-4 17:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
okace
初级用户




积分 130
发帖 15
注册 2004-7-30
状态 离线
『第 2 楼』:  

好像sed也不行的,它的替换貌似仅支持16进制的数字和字母,其他的字符就不行了。

2008-11-4 17:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  

转帖仅供参考,未测试是否可行。
http://upload.cn-dos.net/img/1051.zip
wide find and replace Ver 2.3.1.120 by BaiYang / 2004 - 2007, 免费软件
                      主页地址 - http://baiy.cn
===============================================================================
在文件或管道中批量搜索-替换字符串——支持多字符集编码
用法: wfr [文件通配符1 文件通配符2 ...] {查找选项:查找内容} {替换选项:替换为}
          [其它选项]
===============================================================================
查找选项:
  -f:      - 匹配精确串
  -fic:    - 匹配精确串(忽略大小写)
  -r:      - 正则表达式匹配
  -ric:    - 正则表达式匹配(忽略大小写)
  -rnnl:   - 跨行正则匹配
  -rnnlic: - 跨行正则匹配(忽略大小写)
  -any     - 匹配文件或管道中的所有内容,主要用于完成单纯的批量字符集编码转换
===============================================================================
替换选项:
  -t:      - 将匹配的内容替换为指定字符串
  -tu:     - 先将指定的“替换为”字符串变为大写,然后开始替换
  -tl:     - 先将指定的“替换为”字符串变为小写,然后开始替换
  -h -?    - 当前屏幕
  注意: 如果您正在使用正则匹配,那么您可以在“替换为”字符串中使用子表达式代换
        (\0 ~ \9)
===============================================================================
字符编码选项:
  -encin:  - 指定输入文本(文件或管道)的字符集编码。
               默认值: 使用当前操作系统的默认代码页。
  -encout: - 指定输出(结果)文本的字符集编码。
               默认值: 与 "-encin" 指定的值相同。
  -encarg: - 指定搜索和替换选项的内容使用何种字符集编码。
               默认值: 使用当前操作系统的默认代码页。
  -unisign - 如果输出指定为 UNICODE 宽字符编码 (如: UCS-2, UTF-8/16 等), 则在文
             件头部加入 BOM 签名,这样支持 unicode 的文本编辑器将会自动识别该文
             件的编码格式。
  -listenc - 列出所有 wfr 支持的字符集编码。
  -listcmp - 列出 wfr 认可的键入字符集编码转换规则表。
  -force   - 强制实施转换,忽略编码兼容性规则。
===============================================================================
其它选项:
  -s       - 包含子目录
  -exp     - 启用内存扩展算法,将会加倍 fr 的内存使用量,但是很多时候可以极大地
             提高执行效率。如果你碰到了性能问题,可以尝试开启该选项。
  -stdin   - 从标准输入设备获得要查找的内容,并将结果从到标准输出设备(如果未指
             定任何文件模板的话,则自动启用该选项)
  -stdout  - 像平时一样, 从文件中获得输入, 但将结果送到标准输出(而不是写回文
             件)
  -frc     - 显示每个文件内发生的替换次数
  -trc     - 显示所有文件总共发生的替换次数
===============================================================================
POSIX 和 Perl 风格的正则表达式:
  - "find - replace" 完整支持 POSIX.2 扩展标准及 Perl 风格的正则表达式。
    以下是支持的字符类及其对应关系:
       POSIX           perl       描述
       --------------------------------------------------------------------
       [:alnum:]                  字母和数字
       [:alpha:]       \a         字母
       [:lower:]       \l         小写字母
       [:upper:]       \u         大写字母
       [:blank:]                  空格和制表符
       [:space:]       \s         空白字符
       [:cntrl:]                  控制字符
       [:digit:]       \d         十进制数字
       [:xdigit:]      \x         十六进制数字
       [:graph:]                  可打印字符(不包括空白符)
       [:print:]       \p         可打印字符(包括空白符)
       [:punct:]                  标点符号
  - 以下是一些 perl 的特殊字符类:
       perl   POSIX等效         描述
       --------------------------------------------------------------------
       \o     [0-7]             八进制数字
       \O     [^0-7]            非八进制数字
       \w     [[:alnum:]_]      单词组成
       \W     [^[:alnum:]_]     非单词组成
       \A     [^[:alpha:]]      非字母
       \L     [^[:lower:]]      非小写字母
       \U     [^[:upper:]]      非大写字母
       \S     [^[:space:]]      非空白符
       \D     [^[:digit:]]      非十进制数字
       \X     [^[:xdigit:]]     非十六进制数字
       \P     [^[:print:]]      非可打印字符
       \<     [^[:alpha:]_]     单词开始
       \>     [^[:alnum:]_]     单词结束
  - 注意: posix 字符类是必须工作在集合中的(“[”和“]”内)。相反,perl 风格
          的字符类是工作在集合运算之外的。
  - 此外,为了便于在命令行输入一些特殊字符,特别定义了一下别名:
       perl风格      POSIX风格       描述
       -----------------------------------------------------------------------
       \"            [:dq:]          双引号
       \'            [:sq:]          单引号
       \t            [:tb:]          制表符
       \n            [:nl:]          换行符 (0x0A)
       \r            [:rt:]          回车符 (0x0D)
       \b            [:bs:]          退格符
===============================================================================
开关的前缀和后缀:
  * 所有命令行开关(选项)都是大小写无关的(如: "-fic:" 和 "-FIC:")
  * 开关的前缀可以是 "-" 或 "/"(如: "/s" 和 "-s")
  * 开关的后缀可以是 ":" 或 "="(如: "/f:", "/f=", "-f:" 和 "-f=" 等效)
===============================================================================
应用示例:
  wfr *.txt *.htm -f:teh -t:the
  wfr *.txt -fic:"My Dir" -tu:"%ROOTDIR%"
  type server.log | wfr /r:"Connected.*218.79" /t:"**Attack** \0"
  type server.log | wfr /r:"^(Smith|James).*\n" /t
  unzip -l *.zip | wfr /r:"^(.{22}:\d\d\s*|(A|  \a| -|.*files$).*\n)" /t
  wfr *.txt /s /any /encin:gbk /encout:utf-8
  wfr *.log /any /encin:ucs-2 /encout:gbk /stdout | OtherApp.exe ...
  wfr *.txt *.htm -r:"张(\a+/>)" -t:"李\1"
  wfr *.txt *.htm -r:"[你我他她它]们" -t:"朋友们"




2008-11-4 17:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
okace
初级用户




积分 130
发帖 15
注册 2004-7-30
状态 离线
『第 4 楼』:  

楼上的,刚去作者网站认真看了帮助,不过明显不支持16进制字符的替换啊。

change filename /from &H0F0F0F0F /to &H0D0D0D0D
需要能直接输入16进制字符,可惜change的命令行长度要小于128字节,否则退出执行,55555555

[ Last edited by okace on 2008-11-4 at 18:18 ]

2008-11-4 17:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  Re 4楼

用change的话,一定要一次替换那么长的字符吗?分开替换能否满足要求?
能否给出真实数据来说明一下替换之前和替换之后,文本内容是啥样的?



2008-11-4 18:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
okace
初级用户




积分 130
发帖 15
注册 2004-7-30
状态 离线
『第 6 楼』:  

change aa.jwn /from "&h180000000C00000000000000000000000000803F0C" /to "&h180000000C00000000000000000000000000803F0C000000080000000000C03F0000004008"

上面是要替换的内容,而且远远不止这么短。。。
附件是要处理的文件,不是文本内容。
上面的内容替换的地址是 偏移量2A11,不过这个地址不是确定的,可能变动。

附件 1: AA.rar (2008-11-4 18:46, 1.2 K,下载次数: 17)
2008-11-4 18:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 7 楼』:  

我听说好像是批处理最长只支持128位字符

超长的字符不能拆分成几次替换么




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-11-5 11:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 8 楼』:  

如果实在不行。。。建议你用PYTHON 写脚本实现吧。




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-11-5 11:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: