2013-12-10 69 views
1

這裏輸出重定向到空的變量是我的代碼:的if/else在批處理文件

IF "%LOGFILE%" NEQ "" (
    CALL :DO_SOMETHING 2>&1> %LOGFILE% 
) ELSE (
    CALL :DO_SOMETHING 
) 

我現在面臨的問題是,if/else語句作爲一個大的語句,該語句作爲一個整體對待需要在語法上正確。所以如果「%LOGFILE%」確實等於「」,那麼第一個CALL語句在語法上將不會是正確的(即使它在這種情況下永遠不會被調用),從而使整個IF/ELSE語句在語法上不正確。

我該如何解決這個問題?

回答

3
IF "%LOGFILE%" NEQ "" (
    SET logfile_redirection=2^>^&1^> %LOGFILE% 
) ELSE (
    SET logfile_redirection= 
) 
CALL :DO_SOMETHING %logfile_redirection% 
+0

謝謝!我還沒有嘗試過,但看起來應該工作。只是想知道爲什麼我需要逃避'>'和'&'。 – user972276

+0

如果你不逃避它們,它會將它們視爲試圖重定向「SET」命令的輸出,並根據原始問題生成語法錯誤。 –

0

另一種方式:

SET logfile_redirection=2>&1> %LOGFILE% 
IF "%LOGFILE%"=="" SET "logfile_redirection=" 
CALL :DO_SOMETHING %logfile_redirection% 

行情SET不是必需的,但能保證有沒有尾隨空格。

+0

當'LOGFILE'沒有設置時,這不起作用。你測試過了嗎? –