Я пытаюсь написать заявление IF ELSE
, вложенное в другое заявление IF
. Вот что у меня есть:Вложенный IF (IF (...) ELSE (..)) оператор в пакете
IF %dirdive%==1 (
IF DEFINED log (
ECHO %DATE%, %TIME% >> %log%
FOR /R %root1% %%G IN (.) DO (
SET _G=%%G
CALL :TESTEVERYTHING !_G:~0,-1! %root1% %root2% %log%
)
GOTO :end
) ELSE (
ECHO %DATE%, %TIME%
FOR /R %root1% %%G IN (.) DO (
SET _G=%%G
CALL :TESTEVERYTHINGnolog !_G:~0,-1! %root1% %root2%
)
GOTO :end
)
)
Когда log
не определен, я получаю:
The syntax of the command is incorrect.
ECHO Wed 07/18/2012, 15:50:12.34 >>
Aaaand Я в недоумении. Я пробовал играть со скобками. Я переместил последнее) на ту же строку, что и перед ней, и она не работает. Дело в том, прекрасно работает, когда определеноlog
. Кажется, он разрывается сразу после или в IF %dirdive%==1
, так как он не получит команду эха, вставленную сразу после этого.
Превосходный ответ. Он исправил это и объяснил, что Я делал неправильно. Это также заставило меня попробовать использовать задержанное расширение в переменной журнала, где оно появляется после перенаправления, заменяя% with!, Которое * также * работает! Поскольку строки никогда не выполняются, он никогда не расширяется, поэтому он продолжается чтобы выглядеть как синтаксис. Спасибо! Редактировать: Из любопытства, как вы думаете, кто-то предпочтет другого? В моем случае это не имеет значения, но можно ли, по-видимому, вызвать проблемы на линии? – Fulluphigh
@JoshuaJefferies - Хорошая идея :-) Мне нравится ваше '>! Log!' Решение лучше, чем '>"% log% "', потому что тогда оно работает правильно, независимо от того, уже ли значение журнала уже заключено в кавычки. Но мне нравится, что мое отредактированное решение самое лучшее :-) – dbenham
@dbenham хороший улов! +1 – alfasin