标题: [文本处理] [已解决]批处理如何查找文本中几行并对比是否正确? [打印本页]
作者: q120072949 时间: 2011-1-4 15:06 标题: [已解决]批处理如何查找文本中几行并对比是否正确?
想从c:\1.txt里查找出5行,并且逐一对比,屏显是否正确:
1.txt内容:
***
****
(名字=小猫-动物)
英文(cat)
(名字=小狗-动物)
英文(dog)
(名字=小猪-动物)
英文(pig)
(名字=小鸟-动物)
英文(brid)
(名字=小鸡-动物)
英文(chicken)
***
****
前面后面都是若干行,没有规律
我要查找的是“英文()”这个里面的内容
其他都是固定的,如名字=小狗,
批处理要做到的效果是查找
“(名字=小猫-动物)”的下面一行是否为英文(cat)
“(名字=小狗-动物)”的下面一行是否为英文(dog)
.........................
要对比5次,每次的结果要屏显一次,
最后如果全部正确屏显全部正确,某个错误就显示哪个错误,如
“(名字=小猫-动物)”对应“英文(cat)”正确
“(名字=小狗-动物)”对应“英文(cat)”错误
...
...
...
查找对比完毕!结果如下
第二行“(名字=小狗-动物)”对应“英文(cat)”错误
----------------------------------------
都正确的话::
“(名字=小猫-动物)”对应“英文(cat)”正确
“(名字=小狗-动物)”对应“英文(dog)”错误
...
...
...
查找对比完毕!结果如下
5行全部正确!按任意键继续!
------------------------------------------------
要说明的是这5行“英文()”内容都是固定的,批处理代码里直接修改就可以,或者从其他文本对比
我这里有很多电脑里都有这个1.txt ,每台直接运行批处理就知道是否正确,目录都是固定的
英文(cat)
英文(dog)
英文(pig)
英文(brid)
英文(chicken)
上面这几行内容是固定的,无需更改,只需要对这5行进行对比就OK啦!
基本目的已经达到了,谢谢!
[ 本帖最后由 q120072949 于 2011-1-9 19:53 编辑 ]
作者: 随风 时间: 2011-1-4 20:12
- @echo off&setlocal enabledelayedexpansion
- set .(名字小猫-动物)=英文(cat)
- set .(名字小狗-动物)=英文(dog)
- set .(名字小猪-动物)=英文(pig)
- set .(名字小鸟-动物)=英文(brid)
- set .(名字小鸡-动物)=英文(chicken)
- for /f "delims=" %%i in (a.txt) do (
- for /f "tokens=1* delims==" %%j in ("%%i") do set str=%%j%%k
- if defined flag (
- for %%a in (!flag!) do set var=!.%%a!
- if "%%i"=="!var!" (echo !flag:名字=名字=!=%%i 正确) else (
- echo !flag:名字=名字=!=%%i 错误。。。。。。
- )
- set "flag="
- )
- if defined .!str! set flag=!str!
- )
- echo;&pause
复制代码
作者: q120072949 时间: 2011-1-5 21:03
尼古拉斯凯奇.随风,你的代码很强大啊,但是我还点小问题这段没有解决
第一个是我可以用VBS替换解决的:
文本里有空格,不是按空格键产生的那种,而是按TAB产生的,复制出来就是“ ”,格式如下:
(名字=小猫-动物)
英文(cat)
这样的格式用上面代码运行屏显什么也没有,除了那PAUSE,
代码改成
set . (名字小猫-动物)= 英文(cat)
还是不行,用VBS替换或者手动替换可以解决。
第二个问题是我无法解决的:
txt中要查找对比的内容如果只存在一行的话就没事,如果有2行以上那就只显示出最后1行的结果
例如我的txt是这样的:
***
****
名字(unit=one)
(名字=小猫-动物)
英文(cat)
(名字=小狗-动物)
英文(dog)
(名字=小猪-动物)
英文(pig)
(名字=小鸟-动物)
英文(brid)
(名字=小鸡-动物)
英文(chicken)
***
****
名字(unit=two)
(名字=小猫-动物)
英文(cat)
(名字=小狗-动物)
英文(dog)
(名字=小猪-动物)
英文(pig)
(名字=小鸟-动物)
英文(brid)
(名字=小鸡-动物)
英文(chicken)
***
****
名字(unit=three)
(名字=小猫-动物)
英文(cat)
(名字=小狗-动物)
英文(dog)
(名字=小猪-动物)
英文(pig)
(名字=小鸟-动物)
英文(brid)
(名字=小鸡-动物)
英文(chicken)
***
****
...........................
下面可能不止3个重复内容
上面的代码只能对比出最后一个“名字(unit=three)”后面的是否正确
前面的“名字(unit=one)”和“名字(unit=two)”下面的
(名字=小猫-动物)
英文(cat)
(名字=小狗-动物)
英文(dog)
(名字=小猪-动物)
英文(pig)
(名字=小鸟-动物)
英文(brid)
(名字=小鸡-动物)
英文(chicken)
如果内容不对批处理无法显示,有什么办法提示吗?
如果是“名字(unit=one)”后面的错误就提示“名字(unit=one)”
因为其他都是一样的,如果只提示错误那也不知道是“名字(unit=one)”还是“名字(unit=two)”错误
现在的代码是运行了只能对比最后一个“名字(unit=last)”,上面若干个不管正确都不提示
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |