if / else将输出redirect到batch file中的空variables

这是我的代码:

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

我面临的问题是,IF / ELSE陈述被视为一个大的陈述,整个陈述需要在语法上是正确的。 因此,如果“%LOGFILE%”确实等于“”,则第一个CALL语句在语法上将不会是正确的(尽pipe在这种情况下永远不会调用),从而使整个IF / ELSE语句在语法上不正确。

我怎样才能解决这个问题?

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

其他方式:

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

SET的引号不是必需的,但确保没有尾随空格。