0

こんにちは、extract というモジュールのコードです。ログファイルは、extract 関数を呼び出す同じスクリプト内の別の関数から生成したファイルです。

 : extract 
  find /c "extract return code: 0" c:\hp\logs\!logfile!
 SETLOCAL EnableDelayedExpansion 
 echo errorleve with percent %errorlevel%
 echo errorleve with dxcalim  !errorlevel!
 if !errorlevel! NEQ 0 (    
     echo do something 
  ) else (
 echo do nothing 
 ) 

)

わかりました、ログファイルに次のエントリがあるとしましょう

  extract return code: 0

結果は次のとおりです。

 ---------- C:\HP\LOGS\logfilename: 1
 errorleve with percent 0
 errorleve with dxcalim  0
 do something
 Press any key to continue . . .

ログファイルに次のエントリがある場合

  extract return code: 1

結果は次のとおりです。

 ---------- C:\HP\LOGS\logfilename.txt: 0
 errorleve with percent 0
 errorleve with dxcalim  0
 do something
 Press any key to continue . . .

ご覧のとおり、行の結果は異なりますが、エラーレベルは同じままです ---------- C:\HP\LOGS\logfilename: 1 ---------- C:\HP\ログ\ログファイル名.txt: 0

私のif文とelse文はエラーレベルを正しく取得していませんか? このコードは、このスクリプトの外でも問題なく動作します。それが私が非常に困惑している理由です。テキスト ファイルに対して同じコードを実行すると正常に動作しますが、それを関数にして別のスクリプト内で呼び出すと、うまくいきませんか?

私は何を間違っていますか?$errorlevel% を確認するのは正しいことではありませんか? 私は両方を試しました!errorlevel! と %errorlevel% ..同じ結果が得られます

4

2 に答える 2

0

SETLOCALクリアしてerrorlevelいます。

SETLOCAL EnableDelayedExpansionの前に を移動してみてくださいfind


補遺: 実際のテスト バッチと結果

@ECHO OFF
SETLOCAL
>q18906531.txt ECHO extract return code: 0
CALL :test
>q18906531.txt ECHO extract return code: 1
CALL :test
GOTO :eof

:test
SETLOCAL EnableDelayedExpansion 
find /c "extract return code: 0" q18906531.txt
echo errorleve with percent %errorlevel%
echo errorleve with dxcalim  !errorlevel!
if !errorlevel! NEQ 0 (    
    echo do something 
 ) else (
echo do nothing 
) 
endlocal
GOTO :EOF

結果:

---------- Q18906531.TXT: 1
errorleve with percent 0
errorleve with dxcalim  0
do nothing 

---------- Q18906531.TXT: 0
errorleve with percent 1
errorleve with dxcalim  1
do something 

私のために働く!

于 2013-09-20T00:20:12.613 に答える