2016-06-16 8 views
0

ログファイルに「失敗」「エラー」などのキーワードを検索し、別のファイルに書き込むための条件を適用するバッチを作成しようとしています。ファイル内のキーワードを検索して条件を適用するWindowsバッチ

例:abc.log ... search.bat - abc.logに「Error」や「Failed」などの単語がある場合、ECHO「DATA LOAD FAILED」以外のECHO「DATA LOAD SUCCESS」これを試し

for /F "delims=" %%a in ('findstr /I /c:"EPMAT" C:\Temp_logs\ExpDataload.log') do set ErrorCount=%%a 

IF /I "%ErrorCount%" == "EPMAT-1:Command Failed to execute." (
    SET Message="DATA LOAD FAILED" 
) ELSE (
    SET Message="DATA LOAD SUCCESS" 
) 

ECHO %Message% 

しかし、%ERRORCOUNT%ではなく、キーワードの、行全体を記憶しています。だから私はさらにライン全体をチェックしようとしましたが、それでもFAILEDではなく常に "DATA LOAD SUCCESS"と表示されます。

IF条件に何か不足している可能性があります。

+0

PowerShellスクリプトを使用しているので、ここでPowerShellにタグを付けましたか? –

+0

申し訳ありませんが、今はWindowsのバッチソリューションのみを探しています。ありがとう。 – cec4111

答えて

0

findstrは、見つかった一致する行を出力します。ループは、この出力の各行を連続してErrorCountに割り当てます。

ループの後、変数はの最後にの一致が見つかります。最初の一致と比較しようとすると問題が発生する可能性があります。

しかし、一致が見つからなかった場合、あなただけの""に比較できるように、変数は実際には、空になります。また

IF /I "%ErrorCount%" == "" (
    SET Message="DATA LOAD SUCCESS" 
) ELSE (
    SET Message="DATA LOAD FAILED" 
) 

、あなたが見つけ、実際の行に本当に興味を持っていないのであれば、単に@ TessellatingHecklerの答えのようなエラーレベルをチェックしてください。

0

スクリプトフォームが私に役立つというテストでは、そして、はい、ErrorCountは全体の行になります - 私は文字列が等しくないいくつかの不一致のスペースがあると推測することができます。 ExpDataload.logからいくつかの行を投稿できますか?別のアプローチとして

、findstrのは、複数の単語を検索することができ、それが失敗した場合、それが一致または1を発見した場合0のリターン/エラーレベルを設定しています。それを作るために、@のaschipflの変更に

findstr /I "failed error" c:\temp_logs\expdataload.log 
if NOT ERRORLEVEL 1 (
    echo "DATA LOAD FAILED" 
) else (
    echo "DATA LOAD SUCCESS" 
) 

編集...仕事。 : - |

+0

申し訳ありませんが、このdintが動作し、エラーを見つけた後でも "DATA LOAD SUCCESS"が表示されます。 – cec4111

+0

私はちょうど論理を逆転させて壊したかもしれないと思う。この編集されたバージョンを試してみてください。 – TessellatingHeckler

+1

@TessellatingHeckler、 'ErrorLevel 0'が' ErrorLevel'が* '0'以上であるかどうかをチェックする*! ErrorLevel 1でない場合はそれを置き換える必要があります。 – aschipfl

関連する問題