![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 03:20 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何实现批量替换? |
| 可打印版本 1,942 / 17 |
| 第1楼 xipx | 发表于 2008-05-27 16:16 |
| 初级用户 发帖 25 积分 62 | |
|
如何实现批量替换? 有一堆代码,要全部替换为相应的汉字。
比如:按原来速度演奏<1F04><A13A><A13B><A13C> 就 可 以 了 后面的代码分别代表一个汉字,替换后就成了:“按原来速度演奏就可以了.” 这样的代码有足足6千多个,不可能依次替换的,但是我有对照表,可否利用那个对照表写个什么脚本,把相应的代码替换为汉字呢? 对照表以如下形式表示 <1F04> 就 <A13A> 可 <A13B> 以 <A13C> 了 |
|
| 第2楼 bat-zw | 发表于 2008-05-27 16:52 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
可是可以,但效率肯定有问题的。
另请楼主贴一段原码上来,好研究下该如何替换好。 |
|
| 第3楼 terse | 发表于 2008-05-27 17:11 |
| 银牌会员 发帖 946 积分 2,404 | |
|
只能替换了 有什么其他办法呢
|
|
| 第4楼 bat-zw | 发表于 2008-05-27 17:27 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
很麻烦,但还是可以实现: 注:a.txt为要转换的文本,b.txt为对照表文本。
[ Last edited by zw19750516 on 2008-5-27 at 05:44 PM ] |
|
| 第5楼 HAT | 发表于 2008-05-27 17:43 |
| 版主 发帖 5,017 积分 9,023 | |
|
change.exe http://upload.cn-dos.net/img/427.zip |
|
| 第6楼 xipx | 发表于 2008-05-27 18:05 |
| 初级用户 发帖 25 积分 62 | |
Originally posted by zw19750516 at 2008-5-27 05:27 PM: |
|
| 第7楼 bat-zw | 发表于 2008-05-27 20:49 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by xipx at 2008-5-27 18:05: @echo off&setlocal enabledelayedexpansion 此句为关闭所有回显然后开启变量延迟。 for /f "delims=" %%i in (a.txt) do set str=%%i&set var=&call :lp 用fo循环r语句r逐行阅读a.txt里的内容并将每行字符串赋值给变量str,同时置空 上一句的变量var,并跳转到脚本标签lp处(并将变量str值传递过去)。 pause>nul&goto :eof 当所有的循环都完成暂停并在输出任意键后退出。 :lp 标签lp。 if "!str:~,1!!str:~5,1!"=="<>" ( for /f "tokens=2 delims= " %%i in ('findstr "!str:~,6!" b.txt') do set a=%%i set str=!str:~6! ) else ( set a=!str:~,1!&set str=!str:~1! ) 如果变量str的第一个字符和第六个字符为<>,则用for循环语句在b.txt中逐行查 找变量str的前六个字符(<....>),并将所在行的以 为间隔的第2组字符串赋值给 变量a,然后将变量str向后移6个位;如果如果变量str的第一个字符和第六个字符 不是<>,则将变量str的第一个字符赋值给变量a,然后将变量str向后移一个位。 set var=!var!!a! 将变量a的值追加在变量var后面。 if defined str goto lp 如果变量str不为空则返回标签lp再(将上述命令)运行一次。 echo !var! (当str经数次移位为空时)在屏幕上显示出变量var的值,然后返回前面的for循环 再次对a.txt下一行重复执行lp后的所有的命令。 ps:如楼主是刚接触批处理,可能看这段注释会有所吃力,最好对着代码边看边测 试和分析(建议用自己修改语句再测试的方法) ---------------------------------------------------------------------------------------------------------- 请仅做理解命令而用,此方法在此处不可取。 [ Last edited by zw19750516 on 2008-5-28 at 10:09 AM ] |
|
| 第8楼 xipx | 发表于 2008-05-27 23:09 |
| 初级用户 发帖 25 积分 62 | |
Originally posted by zw19750516 at 2008-5-27 08:49 PM: 感谢感谢!!我会自己试试看的 ![]() |
|
| 第9楼 slore | 发表于 2008-05-27 23:25 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
6千……多……还是VBS快些=。=
|
|
| 第10楼 lxmxn | 发表于 2008-05-28 03:08 |
| 版主 发帖 4,938 积分 11,386 | |
|
试着用 Perl 写了一个,有 Perl 环境的话可以试试:
|
|
| 第11楼 pusofalse | 发表于 2008-05-28 03:52 |
| 银牌会员 发帖 646 积分 1,604 | |
|
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do ( set str=%%a call :lp ) pause>nul&goto :eof :lp for /f "tokens=1,2" %%a in (b.txt) do set str=!str:%%a=%%b! echo !str! |
|
| 第12楼 xipx | 发表于 2008-05-28 09:54 |
| 初级用户 发帖 25 积分 62 | |
Originally posted by slore at 2008-5-27 11:25 PM: VBS不会啊,学一个都够呛的了 ![]() |
|
| 第13楼 xipx | 发表于 2008-05-28 09:56 |
| 初级用户 发帖 25 积分 62 | |
Originally posted by lxmxn at 2008-5-28 03:08 AM: |
|
| 第14楼 xipx | 发表于 2008-05-28 09:58 |
| 初级用户 发帖 25 积分 62 | |
Originally posted by pusofalse at 2008-5-28 03:52 AM: 谢谢提供多种思路,虽然现在还不太理解 ![]() |
|
| 第15楼 bat-zw | 发表于 2008-05-28 10:05 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by pusofalse at 2008-5-28 03:52: 兄弟的这个代码远胜于我的,是我又犯了效率错误,同时也想复杂了(本来就是一个简单的连续替换)请楼主使用此代码进行替换处理。 [ Last edited by zw19750516 on 2008-5-28 at 10:11 AM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |