此代码可以在批处理文件中找到它自己
for /F "delims=" %%i in ('findstr /e /v "return code: 0" login.txt') do (
echo %%i found a string that matched for example return code 1 login.txt
goto :eof
)
:eof
login.txt的内容为
tstxtract return code: 0
tstxtract return code: 0
tstxtract return code: 1
因此,如果有任何行与搜索条件不匹配,则会执行echo命令..到目前为止这么好没问题(谢谢用户zfus)
但是我将相同的代码放在另一个脚本中,这次我将文件名作为变量从另一个函数传递出来.. find命令发生了一些奇怪的事情。首先让我给你看一下剧本
:extract
dir /b /a-d | find /v "pstlist">pstlist
FOR /F %%i in (pstlist) do (
set pstname=%%i
if exist c:\tokyo\scripts\output\%%i (
mkdir C:\output\%%i_%todaydate%_%now%
echo **************** extraction result >> c:\%extractlog%
extract.exe -i -l c:\logs >> c:\%extractlog%
) else (
mkdir C:\output\%%i
echo **************** extraction result >> c:\%extractlog%
extract.exe -i -l c:\logs >> c:\%extractlog%
)
)
goto chklog
:chklog
for /F "delims=" %%i in ('findstr /e /v "return code: 0" C:\%extractlog%') do (
echo %%i found a string that matched for example return code 1 login.txt
goto :eof
)
:eof
:eof
echo end & exit
好的请留下来..好吧,所以当你看到我现在正在传递C:\%extractlog%,这是日志文件的位置,我希望findstr命令查看chklog函数。
此时chklog函数与我上面显示的代码相同,唯一的区别是它被另一个函数调用,并且变量被传递给它。
那么问题是什么?
现在,findstr命令没有查看文件c:\%extractlog%的内容,而是查看%extractlog%文件名。因此,如果%extraactlog%名称是12345.txt findstr命令在文件名中查找并查找serach条件而不在其内容中?所以它甚至不再查看文件内部了。它正在查看文件名?我究竟做错了什么 ? 有人可以告诉我>?为什么findstr命令没有查看%extractlog%文件的contenet?
提前感谢你们
答案 0 :(得分:1)
findstr
命令使用a / C开关指定要搜索的字符串。在我看来,文件名的C:\
被视为此选项。我建议你用引号括起文件名:
for /F "delims=" %%i in ('findstr /e /v "return code: 0" "C:\%extractlog%"') do (