このコードは、バッチ ファイル内で単独で動作します
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% ファイルのコンテンツを参照しないのはなぜですか?
よろしくお願いします