як я можу змусити файл .bat продовжуватись після помилки


30

У мене є .bat файл у Windows, який робить три речі

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Іноді cmd1 може вийти з ладу, і це нормально, я хотів би продовжувати та виконувати cmd2 та cmd3. Але мій кажан зупиняється на cmd1. Як я можу цього уникнути?

Оновлення для наочності - це не інші файли .bat, це команди EXE. Сподіваємось, мені не доводиться будувати дерево файлів .bat просто для цього.


Ви повинні мати можливість запустити команду за допомогою cmd /C.
Der Hochstapler

1
Потрібно показати конкретний приклад коду того, що не працює. Пакетні файли зазвичай не завершуються автоматично, якщо команда не працює з помилкою. Пакетні файли припиняються, якщо є синтаксична помилка. Якщо ваш код виходить із-за помилки exe, то у вашому коді повинна бути логіка, яка викликає таку поведінку.
dbenham

Відповіді:


18

Іншим варіантом є використання амперстанда ( &)

cmd1 & cmd2 & cmd3

Якщо ви використовуєте подвійний, він виконується лише у тому випадку, якщо попередня команда успішно виконана ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Якщо ви використовуєте подвійну трубу ( ||), вона виконує лише наступну команду, якщо попередня завершується кодом помилки ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3


Чи можу я це зробити і при передачі аргументів? Я просто спробував, і це не побачило роботу.
ConfusedNoob

@ConfusedNoob Я постійно працюю ... У мене є CHKDSKкоманда з аргументами, яка працює. Я набираю check D: & check E: & check F:, і це працює. Аргументи файлу BAT включають /perf /f /r /b /scanперемикачі
канадський Лука REINSTATE MONICA

2
хороший! приніс мені ідею, як реалізувати кілька спроб: cmd || cmd || ... виконає наступний cmd, поки не вдасться
iTake

1
Це робить довгі сценарії нечитабельними, чи немає іншого способу?
січень

1
@CanadianLuke Ну пакет - це пакетна рамка Windows. Як ви запускаєте сотні команд неінтерактивно? Чи є кращий підхід у силовій оболонці? Хіба що гірше переїхати туди?
січень

11

Імовірно, що cmds є іншими .bat-файлами укладаються такі команди:

 call cmd1
 call cmd2
 call cmd3

10

Це працювало для мене:

cmd.exe /c cmd1 arg1
cmd2
...

Це використовується cmd.exeдля виконання команди в новому екземплярі інтерпретатора команд Windows, тому невдала команда не перериває пакетний скрипт. /cПрапор вказує інтерпретатора припинити , як тільки команда завершується виконання.

cmd2виконується, навіть якщо перша команда не працює. Додаткову інформацію див. У cmd /?командному рядку Windows.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.