[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复  523066680


    你这打击新人的积极性么
zydrawer 发表于 2018-2-6 20:36



花了好久时间没有解决,说明这个事用批处理不方便,如果自己需要解决问题,而不是学习批处理,完全没有必要死磕批处理。

1.楼主用了2层for循环,每一行替换把key.txt要重新读取一边,效率低。
2.要使用延时变量,搞得代码变量使用要注意,对新手,基础不是很好的话,明明自己思路对的但是代码却不是按自己想的走。
3.如果KEY.TXT里面有某些特殊字符,set h2=!h1:%%i=%%j!的方式替换,导致语法错误出错,不能解决楼主问题。

如果把批处理当解决问题工具的话,有其他东西能简单搞定也愿意使用的话,文本,字符串处理交给别的脚本语言是正确的,系统自带的VBS也行,不过代码多些。

比如楼主的问题,用ruby脚本语言,不使用特殊用法刻意减少代码行数,纯粹按最简单的逻辑处理,使用基本语法,不到10行还简单明白。
  1. text = File.read('findfile.txt') #读取全部内容保存到text变量
  2. kvlist = File.read('key.txt')             #读取key.txt文件内容
  3. kvlist.each_line do |line|               #并按行循环
  4.     line = line.chomp                     #去掉末尾\r\n换行符
  5.     if line.length > 0                      #不是空行的话
  6.         kv = line.split("\t") #Tab      #按Tab分割得到KEY,VALUE数组
  7.         text.gsub!(kv[0], kv[1])       #替换内容
  8.     end
  9. end
  10. File.write('findfile_2.txt', text)
复制代码
问题:
我写的bat处理命令虽将字符串替换成功,但是也将没有替换的行也重复输出了,
花了好久时间也没有找到原因,拜托各位前辈大神了
zydrawer 发表于 2018-2-6 16:12


批处理很简单,一行一行走,查看每行的数据和自己的预期是否一致就能找出问题。
简单的调试方法:

findfile.txt只写简单的2行,key.txt先写2行。
abc def 123 456 777
abc 888 456 123

33 ccc
456 xxx

然后把echo off改成echo on,自己在cmd下运行看每行执行的结果,尤其是在输出文件前,可以自己echo单独看看。
echo xxx > b.txt => echo xxx b.txt

另外,大体一看有2处不是很明白,
if !h1! neq !h2!
为什么要判断替换后是否相同?
abc def 123 456 777找不到33没有替换为ccc那么它还是abc def 123 456 777,直接输出就行。
abc def 123 456 777再找到456替换为abc def 123 xxx 777,直接输出,为什么要判断找到与否?

if !num! == 0 (
为什么要记录替换次数?一行只替换一次么?比如abc 33 456的话,只把33替换为ccc,456就不再替换为xxx了是么?描述的需求里面没有体现。
1

评分人数

TOP

返回列表