标题: [文本处理] 字符查询测试的BAT脚本为何出错? [打印本页]
作者: yj850624 时间: 2013-1-24 22:14 标题: 字符查询测试的BAT脚本为何出错?
- @echo off & setlocal EnableDelayedExpansion
- title 字符查询测试脚本
- color 0a
- for /f "delims=" %%i in (1.txt) do (
- set string=%%i
- echo !string!
- for /f "delims=" %%t in ('findstr /m "!string!" 2.txt') do (
- set str=%%t
- call :abc
- )
- )
- pause
- exit
- :abc
- if not "!str!"=="" (
- echo !string!存在于文件:!str! >>reasult.txt
- set str=
- ) else (
- echo !string!不存在 >>reasult1.txt
- )
- :eof
复制代码
这段代码的大意是想凡是在2.txt凡是能查找到的关键字都写到reasult.txt文件中了,同时还想把没有查到的关键字写到reasult1.txt中,但是在if子句中前半句可执性,后半句else子句执行不了。这是为什么啊??有人能解释一下吗?谢谢!
配套的1.txt和2.txt我上传到附件里了。如果有知道的兄弟,帮忙给指教一下吧,谢谢啊!
作者: batman 时间: 2013-1-24 22:26
本帖最后由 batman 于 2013-1-24 22:28 编辑
- findstr /g:1.txt 2.txt>reasult.txt
- findstr /v /g:1.txt 2.txt>reasult1.txt
复制代码
ps:请楼主以后像我这样把代码括起来
作者: BAT-VBS 时间: 2013-1-24 22:54
按照楼主的思路:- @echo off
- for /f "delims=" %%i in (1.txt) do (
- for /f "delims=" %%t in ('findstr /m "%%i" 2.txt') do (
- call :abc %%i %%t
- )
- )
- goto :eof
-
- :abc
- if "%2" neq "" (
- >>reasult.txt echo %1存在于文件:%2
- ) else (
- >>reasult1.txt echo %1不存在
- )
复制代码
作者: yj850624 时间: 2013-1-25 10:25
回复 2# batman
您好!首先,不好意思。下次发帖我会将代码括起来的。您提供的代码中给findstr加上/v参数能达到我的目标,中文
的cmd帮助机器翻译的太抽象了,我理解的不好所致。您的方法曲线救国、非常巧妙,但是不知您可否指出我的代码中
为什么在if-else中,else之后的代码始终没有执行呢?
作者: yj850624 时间: 2013-1-25 10:25
回复 3# BAT-VBS
您好!首先,谢谢您给出的代码,您的这套代码比我的强多了,变量传递用的很好,给我非常大的启发。但是您的代码存在一样的问题,就是在if-else中,else之后的代码始终没有执行。我想知道这是为什么?谢谢啊!
作者: hankerer 时间: 2013-1-25 12:43
回复 4# yj850624
因为findstr /m这一行如果找不到的话就会返回空,而返回空的话,这条for语句根本就不会执行的。
作者: hankerer 时间: 2013-1-25 12:49
回复 5# yj850624
改成这样试试吧- @echo off & setlocal EnableDelayedExpansion
- title 字符查询测试脚本
- color 0a
- for /f "delims=" %%i in (1.txt) do (
- set string=%%i
- echo !string!in 1.txt
- for /f "delims=" %%t in ('findstr /m "!string!" 2.txt') do (
- set str=%%t
- )
- if defined str (
- echo !string!存在于文件:!str! >>reasult.txt
- ) else (
- echo !string!不存在 >>reasult1.txt
- )
- )
- pause
复制代码
作者: terse 时间: 2013-1-25 15:41
本帖最后由 terse 于 2013-1-25 15:57 编辑
上面变量 STR 不清呢
去除变量 直接写- @echo off & setlocal EnableDelayedExpansion
- title 字符查询测试脚本
- color 0a
- for /f "delims=" %%i in (1.txt) do (
- (for /f "delims=" %%j in ('findstr /im "%%i" 2.txt') do (
- >>reasult.txt echo %%i存在于文件:%%j
- ))||>>reasult1.txt echo %%i不存在
- )
- pause
复制代码
作者: yj850624 时间: 2013-1-25 18:47
回复 6# hankerer
非常感谢啊!原来是这样的,我也做了相关的实验,证明的确如此啊。不知这算不算for语句的一个小bug呢?哈哈。
作者: yj850624 时间: 2013-1-25 18:49
回复 7# hankerer
if语句中的defined参数,我之前看的教程中没有,查阅cmd命令帮助学习了,在这里用的真好,真巧。谢谢啊!
作者: yj850624 时间: 2013-1-25 18:56
回复 8# terse
wow!
说实话,我是初学者,所以代码写的有些罗嗦。感谢前面的几位坛友,顺着我的思路帮我解决问题。而您的代码能达到目的并且很简洁,这的确是我要学习的,并且是我下一步要改进的地方。感谢您的帮忙!
作者: BAT-VBS 时间: 2013-1-25 19:12
回复 9# yj850624
不是bug,它的工作方式就是那个样子的。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |