0

このコードは、バッチ ファイル内で単独で動作します

 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% を渡しています。

この時点で、chklog 関数は上で示したものと同じコードですが、別の関数によって呼び出され、変数が渡されるという点のみが異なります。

それで、問題は何ですか?

findstr コマンドは、ファイル c:\%extractlog% の内容を調べていませんが、%extractlog% ファイル名を調べています。したがって、%extraactlog% の名前が 12345.txt の場合、findstr コマンドは検索条件を検索してファイル名の検索条件を検索し、コンテンツの内部では検索しませんか? そのため、ファイル内を検索することさえありません。ファイル名を見ていますか?私は何を間違っていますか?>誰か教えてください。findstr コマンドが %extractlog% ファイルのコンテンツを参照しないのはなぜですか?

よろしくお願いします

4

1 に答える 1

1

findstrコマンドは /C スイッチを使用して、検索する文字列を指定します。C:\ファイル名の がこのオプションとして使用されているようです。次のようにファイル名を引用符で囲むことをお勧めします。

for /F "delims=" %%i in ('findstr /e /v "return code: 0" "C:\%extractlog%"') do (
于 2013-09-19T10:24:22.897 に答える