Frage von Suptrx, 64

Batch Datei soll nach einem Fehler weiterlaufen?

Hallo Community,

ist es möglich, dass eine batchdatei trotz error weiterläuft?

@echo off :start start "" "error.bat" //hier hällt das programm an ! start "" "continue.bat"

Antwort
von PWolff, 35

Eigentlich läuft eine Batch-Datei weiter, auch wenn ein Fehler auftritt.

Und start gibt die Kontrolle sofort zurück an die aufrufende Batch-Datei.

Im Test habe ich das Verhalten nicht nachvollziehen können.

Hast du eine möglichst einfache Version von error.bat, bei der das Verhalten auftritt?

Wo sind die Zeilenumbrüche? (du kannst Codebeispiele mit Klick auf <> eingeben)

(und Kommentare werden in Batch-Dateien mit REM (+ Leerzeichen) eingeleitet, und Befehle auf einer Zeile mit & getrennt)

Kommentar von Suptrx ,

Das Kommentar habe ich nur für guteFrage eingefügt.

@echo off 
:start 
start "" "error.bat" 
start "" "continue.bat"
goto start

Ich möchte den Fehler bewusst erzeugen. Jedoch läuft die Datei nur weiter, wenn ich den Fehler per "ok" bestätige.

Kommentar von PWolff ,

Sorry, ich kann das mit Batch-Dateien, die nur Ausgabebefehle (echo) enthalten, nicht nachvollziehen.

Aber auch, wenn error.bat irgendwas enthalten würde, sollte die laufende Batch-Datei weiterlaufen.

Entweder ist irgendwas mit der Shell, oder die error.bat ist irgendwas besonderes.

Deshalb habe ich auch nach dem Inhalt der error.bat gefragt. Bzw. nach einer möglichst einfachen Version, mit der der Fehler auch auftritt.

(Ähnliches auch mit continue.bat.)

Tritt der Fehler auch auf, wenn error.bat bzw. continue.bat nur die folgende Zeile enthalten?

echo hier ist %0

-----

Nachrag: Welche Datei läuft nur weiter, wenn du mit "ok" bestätigst? die gerade laufende, error.bat oder continue.bat?

Antwort
von S1r1us13, 37

In der Regel empfiehlt es sich, vor Ausführung eines Befehls zu prüfen, ob er auf Fehler stoßen könnte, z. B. statt "start Miep.bat"

if exist Miep.bat start Miep.bat

Ist das nicht möglich, musst du zwischen EXE-Dateien und BAT-Dateien unterscheiden. EXE-Dateien sind einfacher:

tasklist /FI "imagename eq Befehl.exe" /V /NH | findstr /C:"Not Responding" >nul 2>nul && start Continue.bat

Diese Befehlsfolge listet erst alle Prozesse namens "Befehl.exe" auf (/V = mehr Infos anzeigen, /NH = ohne Überschriften) und schaut, ob sie hängen (Not Responding). Falls dem so ist (&& führt dazu, dass der folgende Befehl nur ausgeführt wird, falls der vorige Befehl erfolgreich war), wird "Continue.bat" gestartet. Sollten mehrere Prozesse mit  demselben Namen gestartet sein, reicht ein einziger hängender Prozess zum Start von "Continue.bat".

Handelt es nicht um eine EXE-Datei, sondern um eine BAT-Datei, musst du über die Prozess-ID (PID) oder den Fenstertitel gehen, da Batchdateien in einem CMD-Prozess ausgeführt werden. Um mit einem zweiten CMD-Prozess den ersten zu identifizieren und zu beenden, ohne sich selbst zu killen, empfehle ich über den Fenstertitel zu gehen.

Den Titel eines CMD-Fensters änderst du mit dem TITLE-Befehl. So kannst du im Nachhinein jedes Fenster eindeutig identifizieren.

Verwendest du zwei verschiedene CMD-Fenster, erkennst du mit folgendem Befehl den gewünschten Prozess:

tasklist /FI "imagename eq cmd.exe" /FI "windowtitle eq Fenstertitel von CMD" /V /NH | findstr /C:"Not Responding" >nul 2>nul && start Continue.bat

Zusätzlich zu der EXE-Datei wird hier noch der Fenstertitel überprüft.

Antwort
von Midgarden, 35

on error go to

Kommentar von Suptrx ,

Aber der Ablauf friert komplett ein, wenn ein Fehler auftritt!

Kommentar von PWolff ,

Das ist Visual Basic und funktioniert in Visual-Basic-Scripten (*.vbs). Die Windows-Shell hat andere Kommandos.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten