У меня есть вопрос о структуре if-else в командном файле. Каждая команда выполняется индивидуально, но я не смог безопасно использовать блоки if - else, поэтому эти части моей программы не работают. Как я могу заставить эти части работать? Спасибо.
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
ELSE IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
batch-file
if-statement
одноименный
источник
источник
{}
кнопку; это помогает сделать сообщения более удобочитаемыми и избежать проблем с разметкой. В ответ на ваш вопрос, он делает сейчас! При написании вопроса ниже представлен предварительный просмотр, чтобы вы могли увидеть, как он будет выглядеть после публикации.Ответы:
Ваш синтаксис неверен. Вы не можете использовать
ELSE IF
. Похоже, что вам все равно это не нужно. Просто используйте несколькоIF
утверждений:Отличная ссылка на пакетный файл: http://ss64.com/nt/if.html
источник
&&
в несколькихif
условиях, видите мой альтернативный синтаксис?IF condition1 IF condition 2
ELSE IF
? Работает нормально под Win7. Смотрите пример: paste2.org/G8tMae92Я думаю, что в вопросе и в некоторых ответах есть некоторая путаница относительно значения этого псевдокода в DOS: ЕСЛИ A ЕСЛИ BX ДАЛЕЕ Y. Это не означает IF (A и B) THEN X ELSE Y, но в Факт означает, ЕСЛИ А (ЕСЛИ В, ТО X, ИЛИ Y). Если проверка A не удалась, тогда он полностью игнорирует внутреннее if-else.
Как упоминалось в одном из ответов, в этом случае только один из тестов может быть успешным, поэтому «else» не требуется, но, конечно, это работает только в этом примере, это не общее решение для выполнения if-else.
Есть много способов обойти это. Вот несколько идей, все они довольно уродливы, но, эй, это (или, по крайней мере, было) DOS!
источник
set
не нуждаются в знаках процента; должно бытьset one=1
AFAIK, вы не можете делать
if else
в пакетном режиме, как вы можете на других языках, он должен быть вложеннымif
.Используя nested
if
, ваша партия будет выглядетьили, как предположил Джеймс, зацепите свои
if
, однако я думаю, что правильный синтаксисисточник
if else
особенно в C-подобных языкахif
тоже просто вложенный . Вам также не нужно вкладывать их в блоки в пакетных файлах.else if
комбо это просто вложенный,if
но я не думал, что вы можете использовать эти ключевые слова вместе в пакетном режиме, как вы можете на языках Си.Я считаю, что вы можете использовать что-то такое, как
источник
do foo
иdo bar
.IF (test) (command) ELSE IF (test) (command)
, вы намекаетеIF (test) (command) ELSE (IF (test) (command))
. Иногда это может работать, но если вы считаете, что это реальная структура программирования, приемлемая в DOS, то это будет PITA для устранения неполадок в случае сбоя.Немного опоздал и, возможно, все еще хорош для сложных условий if, потому что я хотел бы добавить параметр "done", чтобы сохранить структуру if-then-else:
источник
IF...ELSE IF
конструкции хорошо работают в пакетных файлах, особенно когда вы используете только одно условное выражение в каждой строке IF:В вашем примере вы используете
IF...AND...IF
конструкцию типа, где 2 условия должны выполняться одновременно. В этом случае вы все еще можете использоватьIF...ELSE IF
конструкцию, но с дополнительными скобками, чтобы избежать неопределенности для следующего условия ELSE:Вышеуказанная конструкция эквивалентна:
Последовательность обработки пакетных команд зависит от порядка разбора CMD.exe . Просто убедитесь, что ваша конструкция соответствует этому логическому порядку, и, как правило, она будет работать. Если ваш пакетный скрипт обрабатывается Cmd.exe без ошибок, это означает, что это правильная (т.е. поддерживается вашей версией ОС Cmd.exe) конструкция, даже если кто-то сказал иначе.
источник
Вот мой пример кода для if..else..if
которые делают следующее
Запрашивать у пользователя имя процесса
Если имя процесса недопустимо, то
оно пишется пользователю
если имя процесса - services, то
оно пишется пользователю
если имя процесса является действительным, а не службами, то
оно пишется пользователю
процесс был убит с помощью
taskill
так я назвал это Process killer.bat
Вот мой код:
источник
вот как я справился, если еще, если ситуация
Обратите внимание, что он не совпадает с блоком if-elseif, как другие языки программирования, такие как C ++ или Java, но он будет делать то, что вам нужно
источник