查找命令不起作用 - 当变量传递给脚本时,脚本内部出现奇怪的结果(挑战一个)

时间:2013-09-18 02:42:55

标签: windows batch-file cmd findstr

此代码可以在批处理文件中找到它自己

 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?

提前感谢你们

1 个答案:

答案 0 :(得分:1)

findstr命令使用a / C开关指定要搜索的字符串。在我看来,文件名的C:\被视为此选项。我建议你用引号括起文件名:

for /F "delims=" %%i in ('findstr /e /v "return code: 0" "C:\%extractlog%"') do (