2014-11-03 3 views
0

Люди до сих пор были здоровы. Выполнен поиск (хотя и не всегда достаточно много!). Почему это не работает?если [true] и [true] then .... else .... batch

if [%_dpsUserUpdate%] == [false] if [%_dpsUserPrompt%] == [false] (
    echo Both User Update and Prompt set to false. Run 7z silently..... 
    7z e "%_file%" -y > nul 
) else (
    echo Either User Update and/or Prompt set to true. Run 7z gui..... 
    7zG e "%_file%" 
) 

Цель - при обновлении и запросить оба значения false, запустить 7z. В противном случае (для остальных 3 перестановок) запустите 7zG. Работает для «ложных и ложных», но не для других 3 комбинаций ....

Конечно, я мог бы придерживаться «goto» там, но это всегда кажется «плохой» кодировкой (не знаю почему!).

+0

возможный дубликат [Как использовать структуру if-else в пакетном файле?] (http://stackoverflow.com/questions/11081735/how-to-use-if-else-structure-in-a-batch-file) –

+0

Попробуйте 'if [% _dpsUserUpdate%] [% _ dpsUserPrompt%] == [false] [false] ('. .. – JosefZ

+0

Вам нужно будет точно указать, как вы устанавливаете '_dpsuserupdate' и' _dpsuserprompt'. – Magoo

ответ

0

Ваш код не работает должным образом, так как синтаксис команды IF: if condition command. Таким образом, у вас есть две команды IF и только одно предложение ELSE, поэтому оно применяется к последним Команда IF, как обычно. Другими словами, ваш пример эквивалентен следующему:

if [%_dpsUserUpdate%] == [false] (
    if [%_dpsUserPrompt%] == [false] (
     echo Both User Update and Prompt set to false. Run 7z silently..... 
     7z e "%_file%" -y > nul 
    ) else (
     echo Either User Update and/or Prompt set to true. Run 7z gui..... 
     7zG e "%_file%" 
    ) 
) 

Я думаю, что этот путь яснее увидеть:

if [%_dpsUserUpdate%] == [false] (
    echo User Update is false 
    if [%_dpsUserPrompt%] == [false] (
     echo Both User Update and Prompt set to false. 
    ) else (
     echo User Update is false, Prompt is true 
    ) 
) else (
    echo User Update is true 
    if [%_dpsUserPrompt%] == [false] (
     echo User Update is true. Prompt is false 
    ) else (
     echo User Update is true. Prompt is true 
    ) 
) 

Это способ, которым я хотел бы сделать это:

set "bothAreFalse=true" 
if [%_dpsUserUpdate%] neq [false] set "bothAreFalse=" 
if [%_dpsUserPrompt%] neq [false] set "bothAreFalse=" 
if defined bothAreFalse (
    echo Both are false 
) else (
    echo Anyone of the other three cases 
) 
+0

Я знаю, что вы не должны просто сказать «спасибо». Но спасибо! :) Уточнено. – stigzler

+0

Вы можете скажите «спасибо», чтобы поддержать мой ответ (ы), когда у вас достаточно репутации, чтобы сделать это ... ** ';-)' ** – Aacini

Смежные вопросы