9

バッチスクリプトを呼び出すプログラムにエラーレベルを報告する必要があることがわかりました。

スクリプトは、スクリプトが正常に実行されたかどうかを表示するために確認したいCSVログファイルを作成します。

私が言いたいのは

IF NOT FIND "[ERR" "test.csv"

または、文字列"[ERR"が出力にない場合は、ERRORLEVEL = 0 ELSE ERRORLEVEL = 1

これが理にかなっていることを願っています。簡単だと思いますが、エラーレベルの設定は、非常に苦痛のようです。

4

3 に答える 3

11

FIND "[ERR" "text.csv"は、少なくとも1つ[ERRが見つかった場合はERRORLEVELを0に設定し、[ERR見つからなかった場合は1に設定します。ロジックを反転する方法が必要です。

[ERR見つからない場合、または1少なくとも1つが見つかった場合は、すぐに0を返すだけの場合は[ERR、次を使用します。

find "[ERR" "test.csv" >nul && exit /b 1 || exit /b 0

後で返される変数に結果をキャプチャする場合は、次のようにします。

find "[ERR" "test.csv" >nul && set "err=1" || set "err=0"

また

find "[ERR" "test.csv" >nul
set /a "err=!%errorlevel%"

結果を返す準備ができたら

exit /b %err%

以下は、受け入れられたが恥ずかしいほど間違っていた私の元の答えです:-(
論理エラーを指摘してくれたCoreyに感謝します。彼のコメントで述べているように、以下の誤ったコードは、すべての行に[ERRテキストがある場合にのみエラーを報告します。

FINDは、見つかった場合はERRORLEVELを0に設定し、見つからなかった場合は1に設定します。ロジックを逆にするには、/Vオプションを使用するだけです。

find /v "[ERR" "test.csv" >nul

エラーレベルを示す変数セットがある場合は、EXIT/Bを使用してERRORLEVELを設定できます。

set err=1
exit /b %err%
于 2012-10-23T15:01:16.283 に答える
3

IFコマンドには、ERRORLEVELが次の数値以上の場合にtrueを返すというロジックがあることに注意してください。それで

IF ERRORLEVEL 0 (...

すべてのFINDコマンドに対してtrueを返します。フレーズがファイルにあるかどうかだけをテストしたい場合に必要なもの:

find "string" "test.txt" > NUL & IF NOT ERRORLEVEL 1 ECHO String was found

私はそれを解決するために年齢を取りました!

于 2017-08-04T09:53:16.983 に答える
1

これは、以前にBATファイルで使用したロジックです。

find "string" "test.txt" > NUL & IF ERRORLEVEL 1 (
    ECHO String was NOT found
) ELSE (
    ECHO String was found
)

IF/ELSEブロック内に任意のコマンドを配置できます。

于 2015-11-12T00:21:29.657 に答える