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

[文本处理] [已解决]批处理如何查找文本中几行并对比是否正确?

想从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 编辑 ]
1

评分人数

    • hanyeguxing: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off&setlocal enabledelayedexpansion
  2. set .(名字小猫-动物)=英文(cat)
  3. set .(名字小狗-动物)=英文(dog)
  4. set .(名字小猪-动物)=英文(pig)
  5. set .(名字小鸟-动物)=英文(brid)
  6. set .(名字小鸡-动物)=英文(chicken)
  7. for /f "delims=" %%i in (a.txt) do (
  8.    for /f "tokens=1* delims==" %%j in ("%%i") do set str=%%j%%k
  9.    if defined flag (
  10.       for %%a in (!flag!) do set var=!.%%a!
  11.       if "%%i"=="!var!" (echo !flag:名字=名字=!=%%i 正确) else (
  12.          echo !flag:名字=名字=!=%%i 错误。。。。。。
  13.       )
  14.       set "flag="
  15.    )
  16.    if defined .!str! set flag=!str!
  17. )
  18. echo;&pause
复制代码
1

评分人数

技术问题请到论坛发帖求助!

TOP

尼古拉斯凯奇.随风,你的代码很强大啊,但是我还点小问题这段没有解决
第一个是我可以用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)”,上面若干个不管正确都不提示

TOP

返回列表