1

Как я могу создать командный файл, который должен выполнять команду только после успешного выполнения предыдущей команды?

2 ответа2

0

Зависит от того, что вы подразумеваете под успешным. Если вы хотите проверить, не вернул ли foo.exe какой-либо код выхода, кроме 0, используйте:

@echo off
start /wait foo.exe
if errorlevel 0 (
  start /wait bar.exe
)

запустить bar.exe после того, как foo.exe вернул код выхода 0 . Вы можете пропустить start /wait если тестируемое приложение является консольным, а не настольным.

Подробнее об этом: Как я могу получить код завершения приложения из командной строки Windows? В ответах Самуэля Ренкерта и Гарри.

0

помимо решения об уровне ошибок, опубликованного Hex и улучшенного комментарием Майкла.

Этот еще быстрее для того, что вы хотите сделать.

первая команда && вторая команда

Вторая команда будет выполняться только в том случае, если первая команда была успешной. т.е. если первая команда не вернула ошибку.

В приведенном ниже примере dir asfsds возвращает этот вывод, но также возвращает ошибку

Если вы выполните команду dir asdfsss & blah, то она будет запущена независимо от того, вернула ли первая команда (dir sdsdf) ошибку или нет.

Но если вы запускаете их с && между ними, то, если первое является ошибкой, второе не запускается. Он основан на идее булевой алгебры. Если A истинно, а B истинно, то A И B истинно. Таким образом, чтобы узнать, являются ли A и B истинными, вы можете проверить A и B, или вы можете быть "ленивым" или, скорее, эффективным, и просто проверить один, и если оно ложно, вы знаете, что все выражение ложно. И если это правда, то вы должны проверить друг друга. Таким образом, A && B проверяет A и проверяет только B, если необходимо проверить B, поэтому проверяет только B, если B истинно. Но эта концепция булевой алгебры применяется к командам, поэтому она запускает первую, первая может вернуть ошибку или нет, а если первая возвращает ошибку, она не будет пытаться запустить и проверить вторую, и если первый не вернет ошибку, то попытается второй. Без сомнения, само выражение вернет true(без ошибок), если оба будут true и false(error) в противном случае.

C:\Users\user> dir asdfsdf
Том на диске C не имеет метки. Серийный номер тома B411-D580

Каталог C:\Users\user

Файл не найден <---------------- Смотрите вывод dir asdfdsds выше

C:\Users\user> dir asdfsdf & echo a
Том на диске C не имеет метки. Серийный номер тома B411-D580

Каталог C:\Users\user

Файл не найден <--- см. 'Echo a' run

C:\Users\user> dir asdfsdf && echo a
Том на диске C не имеет метки. Серийный номер тома B411-D580

Каталог C:\Users\user

Файл не найден

C:\Users\ пользователь>

Если вы выполнили команду dir filethatexists && echo a, то увидите, что первая команда выполняется успешно, а затем выдает команду run. Точно так же echo a && echo b

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .