2012-11-01 42 views
0

你能看到任何理由爲什麼這會顯示0批處理文件:存儲結果代碼給一個變量

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

然而,這顯示空白?

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

請注意,兩種情況下的「%ConnectDirectExe%」行完全匹配。如果我反轉塊以相反的順序運行,結果也會相似地反轉。

爲什麼我不能在result中存儲%errorlevel%的結果並顯示它?它一直顯示爲空白。

更新:

好像我的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> 

應該不是第二回波顯示

ResultCaption2=2 

? 

回答

1

我懷疑你的代碼被嵌入在括號內的塊中,可能是IF語句或FOR循環的一部分。與此相關的問題是,在解析行時發生擴展,並且在塊中的任何內容被執行之前立即解析整個塊。因此%errorlevel%將是您的命令執行前的值,並且%Result%可能未定義。

解決方案是使用延遲擴展,必須先啓用它才能使用。從命令提示符輸入HELP SET以獲取有關延遲擴展的更多信息,以及在處理代碼塊時如何提供幫助。

setlocal enableDelayedExpansion 
for ... in(...) do (
    "%ConnectDirectExe%" -f"%ConnectDirectCredentials%" < "%CurrentCDConfigFile%" > "%CurrentCDTaskLogFile%" 
    SET Result=!errorlevel! 
    ECHO errorlevel is !Result! 
) 
+0

我認爲你正在做些什麼....爲了幫助我理解,你能否修改我的更新示例文件if.bat,使其工作? – ChadD