0

これが0を表示する理由を理解できますか

"%ConnectDirectExe%" -f"%ConnectDirectCredentials%" < "%CurrentCDConfigFile%" > "%CurrentCDTaskLogFile%"    
ECHO %errorlevel%  

まだこれは空白を表示しますか?

"%ConnectDirectExe%" -f"%ConnectDirectCredentials%" < "%CurrentCDConfigFile%" > "%CurrentCDTaskLogFile%"    
SET Result=%errorlevel%  
ECHO errorlevel is %Result%

どちらの場合も、「%ConnectDirectExe%」行は完全に一致することに注意してください。ブロックを反転して逆の順序で実行すると、結果も同様に反転します。

%errorlevel%の結果をResultに保存して表示できないのはなぜですか?空白として表示され続けます。

アップデート:

IFブロック内で発生した場合、SETステートメントが実行されていないようです。

次のバッチファイルが与えられた場合、if.bat:

echo off

SET Result=1
ECHO ResultCaption1=%Result%

IF 1 equ 1 (
    SET Result=2
    ECHO ResultCaption2=%Result%
) else (
  ECHO 1 is not = 2
)

実行すると、次の出力が表示されます。

C:\Batch>if.bat

C:\Batch>echo off
ResultCaption1=1
ResultCaption2=1

C:\Batch>

2番目のECHOディスプレイではありません

ResultCaption2=2

?
4

1 に答える 1

1

あなたのコードは、おそらくIFステートメントまたはFORループの一部として、括弧で囲まれたブロック内に埋め込まれていると思われます。それに関する問題は、行が解析されるときに拡張が発生し、ブロック内の何かが実行される前に、ブロック全体が一度に解析されることです。したがって %errorlevel%、コマンドが実行される前の値になり、%Result%おそらく未定義になります。

解決策は、遅延拡張を使用することです。これは、使用する前に有効にする必要があります。コマンドプロンプトHELP SETから入力して、拡張の遅延と、コードのブロックを処理するときにどのように役立つかについての詳細を取得します。

setlocal enableDelayedExpansion
for ... in(...) do (
  "%ConnectDirectExe%" -f"%ConnectDirectCredentials%" < "%CurrentCDConfigFile%" > "%CurrentCDTaskLogFile%"
  SET Result=!errorlevel!
  ECHO errorlevel is !Result!
)
于 2012-11-01T21:34:30.313 に答える