2017-09-29 10 views
1

私は1つのバッチジョブを持っていますが、inventory.batとしましょう。このバッチ・ジョブはアプリケーション固有の実行可能ファイルと接続し、接続中にアプリケーション・プロセスを実行する入力に基づいて入力をアプリケーション実行可能ファイルに渡します。アプリケーション内で更新されたレコードがゼロでない場合、警告メッセージが返されることがあります。バッチ出力に警告メッセージしかない場合、ERRORLEVELを0にリセットする方法

実行可能コードは使用できません。出力が警告またはバッチ出力の場合は、ERRORLEVELを0に再設定します。

バッチコード

..\\application.exe - update database - systemswitch:autoConvertFile="..\\sourcefilelocation\\filename.txt" 

出力:

warning: no of updated records :0 

いくつかの回

Info : no of updated records: 0 
Error: invalid data loaded 
+1

基本的に、アプリケーションの出力が 'Info:'または 'Warning:'で始まっていないかどうかをチェックし、正しい場合は 'ErrorLevel'を0に設定します。それ以外の場合は 'ErrorLevel'を0以外に設定しますか?おそらくこれはあなたのために働きます: 'application.exe ... | findstr/B/C: "Info:"/C: "警告:"> nul'(または 'inventory.bat'をパイプしたい)... – aschipfl

+2

を参照してください。[どのcmd.exe内部コマンドでERRORLEVELを0にクリアしますか? success?](https://stackoverflow.com/questions/34968009/)、 'ver> nul'のように成功すればエラーレベルをクリアするコマンドを使います。 – Mofi

答えて

0

これを処理する別の方法は、ERRORLEVELを制御する変数に保存することです。返されるものはいつでも知ることができます。

SETLOCAL 
SET "EXITCODE=0" 

app.exe >"%TEMP%\app.log" 2>&1 
SET "EXITCODE=%ERRORLEVEL%" 
IF %EXITCODE% NEQ 0 (
    IF <output shows no real errors> (SET "EXITCODE=0") 
) 

EXIT /B %EXITCODE% 
+0

'<出力には本当のエラーはありません>の部分は何ですか?文字列の比較などを意味しますか? – SteveFest

+0

これを確認してください。 stdoutとstderrをファイルに取り込むために何かを追加します。実際のエラーがあるかどうかを判断するには、チェックするために何をする必要があるかを意味します。文字列はログファイルを比較し、ファイルの存在を検出します。 – lit

+0

ああそうです。私は 'FINDSTR'と'> 'があなたにとって便利だと思います。 – SteveFest

関連する問題