0

你能看到为什么这会显示 0

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

但这显示为空白?

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

请注意,两种情况下的“%ConnectDirectExe%”行都完全匹配。如果我反转块以相反的顺序运行,结果也同样反转。

为什么我不能将 %errorlevel% 的结果存储在 Result 中并显示出来?它一直显示为空白。

更新:

如果我的 SET 语句出现在 IF 块中,它们似乎没有被执行。

给定以下批处理文件 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>

不应该显示第二个 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 回答