0

私は2つのbatファイルを持っています。callexcode.cmd は excode.cmd を呼び出し、存在しないファイル 'saurabh' を呼び出すだけです。呼び出し元にエラー コードを出力したい場合 (この場合は callexcode.cmd で、成功したことを示す 0 を取得します。しかし、「saurabh」というファイルがないため、エラー コードは 1 です。終了を出力しています)両方のバットファイルのコード. callie は終了コードを 1 と表示しますが、caller は終了コードを 0 と表示します. 誰でも見て、どこが間違っているのか教えてください. むしろ、終了コードがめちゃめちゃ。

callExcode.cmd

 IF "%1"=="abc" (
  SET good=%2
 )
 IF /I "%good%" == "pqr" ( 
 CALL exCode
 echo ' in file callexcode, error level ret = %ERRORLEVEL%'
 @EXIT /B %ERRORLEVEL% 
 )

excode.cmd

CALL saurabh 
echo 'in file excode'
echo 'exit code %ERRORLEVEL%'
@EXIT /B %ERRORLEVEL% 

出力 C:\docs>callExcode.cmd abc pqr

C:\docs>IF "abc" == "abc" (SET good=pqr )

C:\docs>IF /I "pqr" == "pqr" ( CALL exCode echo ' ファイル callexcode 内、エラー レベル ret = 0'

)

C:\docs>CALL saurabh 'saurabh' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。

C:\docs>echo 'in file excode' 'in file excode'

C:\docs>echo 'exit code 1' 'exit code 1' ' ファイル callexcode 内、エラー レベル ret = 0'

前もって感謝します!

サウラブ

4

1 に答える 1

1

( )内にコードがある場合、インタープリターはこれを 1 行のコードと見なします。環境変数は、実行時ではなく、行の解析時に展開されます。これを回避するには、スクリプトの先頭で次のコード行を使用します。

setlocal enableextensions enabledelayedexpansion

その行を取得したら、使用できます

!ERRORLEVEL!

それ以外の

%ERRORLEVEL%

_ 環境変数名に名前を付ける%の代わりに、 「解析時ではなく、コード行の実行時にこの変数を展開する」ことを意味します。

明細書

于 2013-04-10T02:28:35.790 に答える