2013-12-10 158 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'没有设置时,这不起作用。你测试过了吗? –