![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 10:41 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 二进制方式处理文件工具 STR (2020.11.16 更新) |
| 可打印版本 41,100 / 72 |
| 第1楼 19951001 | 发表于 2008-04-26 21:45 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
二进制方式处理文件工具 STR (2020.11.16 更新) STR
File: A File to be Processed data. //文件 Start: Offset to Process data. //文件中处理数据的起始位置 (文件的开头位置为0) Bytes: Bytes to Process. //要处理的字节数量 (如果输入0,则表示从Start开始到文件末尾) /C: Copy Bytes from File to dstFile. //从源文件向目标文件复制数据 /I: Insert Bytes to dstFile from File. //从源文件向目标文件插入数据,插入数据后目标文件增加 Bytes个字节 dstFile: A File to Write Result data. //目标文件 Address: Offset to Write Result data. //目标文件中要复制或插入数据的位置 (如果目标文件不存在,该值被忽略) STR /D: Delete Bytes from File & Write Result to dstFile. //从源文件删除数据并结果写入目标文件 STR /V: View File In Hex Style. //十六进制方式查看文件 /A: Show ASCII Value. //显示ASCII码 /P: Pause Echo Screen. //满屏暂停 STR : Bytes: Must be 0. //必须为0 /F: Find String in File. //在文件中查找字符串 /Hex: Hex Style. //十六进制方式 /Asc: ASCII Style. //ASCII码方式 Value: Hex_Digital/ASCII String (40 Characters Maximum). //字符传真的值,最长40个字符 (如果是十六进制串长度应为双数) /I: Ignore Case. //忽略大小写 /A: Process All Value in File. //在文件中查找所有满足要求的字符串(默认查找1次) STR : Bytes: Must be 0. //必须为0 /E: Edit File. //编辑文件 STR Bytes: Must be 0. //必须为0 /R: Relace SrcString with DstString. //字符常替换 SrcString: :. //源串,可以使用十六进制或ASCII码串 DstString: :. //目标串,可以使用十六进制或ASCII码串 /A: Process All SrcString in File. //在文件中查找所有源字符串(默认替换1次) 说明: 1 使用 /C 和 /I 命令时,如果目的文件不存在,Adress 的值将被忽略,直接执行将源文件从 Start 开始的 Bytes 个字节写入到新创建的目的文件中 2 使用 /C 和 /I 命令时,如果目的文件存在,并且不输入 Address,则Address 默认为0,也就是文件的起始位置。 3 目前处理的单个文件大小不超过 2G 例子: str 1.exe 0x100 0x10 /d 2.bin 执行将文件1.exe 从位置256开始的16个字节删除,并将结果写入到2.bin,文件2.bin的长度将比1.exe长度小16 str 1.exe 0x100 0x10 /c 2.bin 20 执行将文件1.exe 从位置256开始的16个字节写入到2.bin的20位置,也就是文件2.bin从位置20开始的16字节被覆盖 str 1.exe 0x100 0x10 /i 2.bin 20 执行将文件1.exe 从位置256开始的16个字节插入到2.bin的20位置,结果文件2.bin的长度将增加16字节 str 1.exe 0x100 0 /v /p /a 从文件偏移位置256开始在屏幕上显示文件内容,如果Bytes输入为0,则表示从Start开始至文件末尾。 str 1.exe 0x100 0 /e /hex:11223344 将文件偏移位置256开始的4个字节修改为,0x11,0x22,0x33,0x44。 str 1.exe 0x100 0 /e /asc:1234 将文件偏移位置256开始的4个字节修改为,1234, 也就是0x31,0x32,0x33,0x34 查找替换算法使用的是 KMP 算法,不重复计数,如文件 1.txt 的内容为10个字符0: 0000000000 如执行命令: str 1.txt 0 0 /f /asc:0000 /a 则执行结果为: Find string At: 0 0x0 4 0x4 不会是: Find string At: 0 0x0 1 0x1 2 0x2 3 0x3 4 0x4 5 0x5 6 0x6 压缩包中包含DOS版本和Win32版本 2008.12.14 修正替换字符串功能中存在的问题 2008.12.19 修正19楼存在问题 2009.2.15 测试版本在50楼 [ Last edited by 19951001 on 2020-11-16 at 17:01 ] 附件 str.rar (18.38 KiB) strWin32.rar (20.34 KiB) |
|
| 第2楼 cchessbd | 发表于 2008-04-28 17:29 |
| 高级用户 发帖 222 积分 525 | |
|
可能这个东西我用不到,但是我需要一个DOS下查找替换文件中的某个字符串的工具……
不知道 19950101兄能否帮忙写一个? 比如: XXX /rN file "12345,d" "54321,g" 查找到才替换,或替换一次就退出。 替换所有 /r N次 /rN 此文件可能会有 3~10 M [ Last edited by cchessbd on 2008-4-28 at 05:39 PM ] |
|
| 第3楼 19951001 | 发表于 2008-05-07 22:52 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
Originally posted by cchessbd at 2008-4-28 17:29: 只需要对文本文件处理吗? |
|
| 第4楼 19951001 | 发表于 2008-11-14 21:20 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
2008.11.14 更新
|
|
| 第5楼 本是 | 发表于 2008-11-15 00:01 |
| 银牌会员 发帖 790 积分 2,227 | |
|
好工具,但.rar 解压时报错:文件"WIN"头被损坏!
请重新上传!!! |
|
| 第6楼 雨露 | 发表于 2008-11-15 08:07 |
| 管理员 发帖 2,601 积分 6,215 | |
|
报错后win32文件夹是空的!
|
|
| 第7楼 本是 | 发表于 2008-11-15 11:13 |
| 银牌会员 发帖 790 积分 2,227 | |
|
文件WIN在根目录。
|
|
| 第8楼 19951001 | 发表于 2008-11-15 11:42 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
已经修复破损的压缩包
|
|
| 第9楼 chishingchan | 发表于 2008-11-24 21:25 |
| 银牌会员 发帖 538 积分 1,284 | |
|
因需修改二进制文件,这种小软件我以前寻找过,只找到纯DOS下的FH,现在这个应该不错。
|
|
| 第10楼 goli2008 | 发表于 2008-12-13 11:07 |
| 中级用户 发帖 97 积分 252 | |
|
坚决支持,!!
找了好久,请楼主将标题改改,可好,方便其他人搜索,谢谢! |
|
| 第11楼 chenall | 发表于 2008-12-13 18:10 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
好东西,收下了,谢谢!
|
|
| 第12楼 chenall | 发表于 2008-12-13 19:10 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
可不可以再加个功能"字符转义"
比如\0 就是ASCII码00 比如 strw test.bin 0x10 0 /e /asc:test\13\0 会写入test和0X0D和0X00 |
|
| 第13楼 19951001 | 发表于 2008-12-13 22:28 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
Originally posted by chenall at 2008-12-13 19:10: 理论上可以实现,不过我近些日子比较忙,暂时没有时间修改 其实也可以这样实现 strw test.bin 0x10 0 /e /asc:test strw test.bin 0x14 0 /e /hex:1300 上述两条命令可以实现你要的功能 [ Last edited by 19951001 on 2008-12-13 at 23:18 ] |
|
| 第14楼 chenall | 发表于 2008-12-14 09:43 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
嗯,上面是可以实现,只是如果放在批处理里面要计算字符长度会比较麻烦.
另一个问题,不知程序有没有返回errorleve值? 比如查找,成功返回?失败返回? |
|
| 第15楼 chenall | 发表于 2008-12-14 10:14 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
查找替换功能好像有些问题..
文件A.TXT内容 strw a.txt 0 0 /r /asc:$1 /asc:j: /a 得到的结果为乱码,而且丢失字符 正确的结果 |
|
| 1 2 3 4 … 5 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |