jak mogę kontynuować mój plik .bat po błędzie


30

Mam plik .bat w systemie Windows, który robi trzy rzeczy

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Czasami cmd1 może zawieść i to jest w porządku, chciałbym kontynuować i wykonać cmd2 i cmd3. Ale mój nietoperz zatrzymuje się na cmd1. Jak mogę tego uniknąć?

Aktualizacja dla przejrzystości - nie są to inne pliki .bat, są to polecenia exe. Mam nadzieję, że nie muszę budować drzewa plików .bat, aby to osiągnąć.


Powinieneś być w stanie uruchomić polecenie za pomocą cmd /C.
Der Hochstapler

1
Musisz pokazać konkretny przykład kodu, który nie działa. Pliki wsadowe zwykle nie kończą się automatycznie, jeśli polecenie nie powiedzie się z błędem. Pliki wsadowe kończą się, jeśli występuje błąd składniowy. Jeśli kod wychodzi z błędu exe, wówczas w kodzie musi znajdować się logika, która powoduje takie zachowanie.
dbenham

Odpowiedzi:


18

Inną opcją jest użycie amperstand ( &)

cmd1 & cmd2 & cmd3

Jeśli użyjesz podwójnego, będzie on kontynuowany tylko wtedy, gdy poprzednie polecenie zakończy się pomyślnie ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Jeśli używasz podwójnego potoku ( ||), uruchamia on następne polecenie tylko wtedy, gdy poprzednie kończy się kodem błędu ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3


Czy mogę to zrobić przy przekazywaniu argumentów? Właśnie próbowałem i nie widziałem, żeby zadziałało.
ConfusedNoob

@ ConfusedNoob Robię cały czas ... Mam CHKDSKpolecenie z argumentami, które działa. Piszę check D: & check E: & check F:i działa. Argumenty pliku BAT obejmują /perf /f /r /b /scanprzełączniki
kanadyjski Luke REINSTATE MONICA

2
dobry! przyszedł mi pomysł, jak zaimplementować kilka prób: cmd || cmd || ... wykona następne polecenie cmd, dopóki się nie powiedzie
iTake

1
To sprawia, że ​​długie skrypty są nieczytelne, czy nie ma innego wyjścia?
sty

1
@CanadianLuke Well batch to środowisko wsadowe systemu Windows. Jak uruchamiasz setki poleceń w sposób nieinteraktywny? Czy istnieje lepsze podejście do powłoki mocy? Czy jest gorzej się tam przenieść?
sty

11

Wcześniejsze cmd są inne pliki .bat stosu poleceń w następujący sposób:

 call cmd1
 call cmd2
 call cmd3

10

To działało dla mnie:

cmd.exe /c cmd1 arg1
cmd2
...

Służy cmd.exedo wykonywania polecenia w nowej instancji interpretera poleceń systemu Windows, więc nieudane polecenie nie przerywa skryptu wsadowego. /cFlaga mówi interpreter do zakończenia, jak tylko zakończy wykonywanie poleceń.

cmd2wykonuje się, nawet jeśli pierwsze polecenie nie powiedzie się. Aby cmd /?uzyskać więcej informacji, zobacz wiersz polecenia systemu Windows.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.