schwinni79
Goto Top

Batchdatei bei Fehler abbrechen lassen

Hallo zusammen,

ich habe eine Batchdatei erstellt und möchte nun abschließend erreichen, dass diese bei Fehlern an der Stelle abbricht und nicht - wie normalerweise üblich- zum nächsten Befehl innerhalb des Stapels geht.

Hintergrund:

Die Datei arbeitet 5 Vorgänge ab - erst zum Schluß soll eine Kontrolldatei angelegt werden. Ist diese Datei vorhanden, wird eine Bestätigungsmail versendet.

Tritt bei Vorgang 2 aber ein Fehler auf, macht die Stapelverarbeitung, wenn möglich, bei Schritt 3 weiter und legt am Ende immer die Datei an - von Fehlern kein Hinweis.

Ziel ist es, bei einem Fehler, egal an welcher Stelle, die Datei zu beenden, den gesamten Stapelverarbeitsvorgang abzubrechen.

Wie ist das möglich?

Vielen Dank für die Hilfe!

Michael

Content-ID: 95796

Url: https://administrator.de/forum/batchdatei-bei-fehler-abbrechen-lassen-95796.html

Ausgedruckt am: 23.12.2024 um 00:12 Uhr

60730
60730 01.09.2008 um 14:14:23 Uhr
Goto Top
Servus,

in solchen Fällen macht es Sinn die Batch in <"code"> <"/code"> - ohne die "" einzufügen.

Du kannst "probieren" %errorlevel% abzufragen oder if not exist oder oder oder...

Aber einfacher wird es, wenn "wir" deinen 5 Schritt Batch Schnippsel sehen und dir am "lebenden" Objekt helfen können.

Gruß
Schwinni79
Schwinni79 01.09.2008 um 15:47:12 Uhr
Goto Top
Hallo Timo,

hier der Code:

@ECHO OFF 


if not exist c:\scripts\save.log goto ausfuehren

del C:\scripts\save.log
ECHO Datei wurde geloescht


:ausfuehren

ECHO Alle Ueberpruefungen abgeschlossen - Sicherung beginnt jetzt!


:: Neue Datei wird geschrieben

ECHO > C:\scripts\save.log

:: Bildschirmausgabe

ECHO Neue Logdatei wurde erstellt am %date% - %time%

:: Eintrag in Logdatei

ECHO Neue Logdatei wurde erstellt am %date% - %time% > C:\scripts\save.log


::-------------------------------------------------------

:: Alte NTBACKUP Logfiles entfernen

DEL "C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\*.log"  

ECHO Alte NTBACKUP Logdatei enfernt >> C:\scripts\save.log

::--------------------------------------------------------

ECHO NTBACKUP beginnt
ECHO NTBACKUP beginnt >> C:\scripts\save.log

C:\WINDOWS\system32\ntbackup.exe backup "@C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\backup.bks" /n "backup.bkf wurde erstellt durch 27.08.2008 um 12:12" /d "Satz am 27.08.2008 um 12:12 erstellt" /v:yes /r:no /rs:no /hc:off /m normal /j "backup" /l:s /f "C:\BACKUP\backup.bkf"  


ECHO NTBACKUP abgeschlossen >> C:\scripts\save.log

::--------------------------------------------------------


CALL C:\scripts\tc-mount.bat


ECHO DASI-Platte eingebunden und entschluesselt >> C:\scripts\save.log


ECHO Dateien werden kopiert >> C:\scripts\save.log


CALL C:\scripts\sicherung-teil2-kix.bat


ECHO Alle Dateien wurden erfolgreich kopiert >> C:\scripts\save.log

CALL C:\scripts\tc-dismount.bat


ECHO DASI-Platte ausgebunden und verschluesselt >> C:\scripts\save.log


ECHO Datensicherung abgeschlossen - %date% - %time% >> C:\scripts\save.log

REM Logdateien zusammenführen

ECHO LOGDATEIEN WERDEN ZUSAMMENGEFASST

ECHO. >> result.txt
ECHO -----------ANFANG DASI-PROTOKOLL---------------------------- >> result.txt
ECHO. >> result.txt

type save.log >> result.txt

ECHO. >> result.txt
ECHO -----------ENDE DASI-PROTOKOLL---------------------------- >> result.txt
ECHO. >> result.txt
ECHO. >> result.txt
ECHO. >> result.txt
ECHO. >> result.txt
ECHO. >> result.txt
ECHO -----------ANFANG NTBACKUP-PROTOKOLL---------------------------- >> result.txt
ECHO. >> result.txt

type "C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\*.log" >> result.txt  

ECHO. >> result.txt
ECHO. >> result.txt
ECHO -----------ENDE NTBACKUP-PROTOKOLL---------------------------- >> result.txt
ECHO. >> result.txt

ECHO LOGADATEIEN WURDEN ZUSAMMENGEFASST

blat "C:\scripts\result.txt" -to info@domain.com -subject "Datensicherung erfolgreich!" -f info@domain.com   
ECHO EMAIL WIRD VERSENDET

pause

Wenn z.B. der Befehl

CALL C:\scripts\tc-mount.bat

nicht ausgeführt werden konnte, weil die entsprechende Festplatte nicht erreichbat war, soll das Script abbrechen und nicht die Mail per blat.exe versenden...

Verstehst du, worauf ich hinaus will?

Michael
AndreasHoster
AndreasHoster 01.09.2008 um 16:08:56 Uhr
Goto Top
Unter der Vorraussetzung, daß c:\script\tc-mount.bat einen Errorlevel zurückgibt, wenn ein Fehler aufgetreten ist, kann man das mit
CALL C:\scripts\tc-mount.bat
if errorlevel 1 exit /b
erreichen.
Errorlevel 0 ist erfolgreich, 1 oder höher gibt Fehler an.
Allerdings muß ein Script entsprechend programmiert sein, damit es Errorlevels zurückgibt. Ohne Rückgabe hast Du nicht viele Chancen mitzukriegen, ob das Skript erfolgreich lief.
Schwinni79
Schwinni79 01.09.2008 um 16:16:57 Uhr
Goto Top
Hallo zusammen,

wie stelle ich das denn mit den errorlevels an - das o.g. script mountet eine mit TrueCrypt verschlüsselte externe HDD. Wo und wie kontrolliere ich denn auf errorlevel und interpetiere sie anschließend?

Michael
60730
60730 01.09.2008 um 16:32:22 Uhr
Goto Top
Servus,

CALL C:\scripts\tc-mount.bat
"sagt" mir natürlich nicht so viel.

Ich würde es so lösen:

if not exist \\meinserver\meinefreigabe>nul @echo Ziel nicht gefunden >> C:\scripts\save.log && goto end
if exist \\meinserver\meinefreigabe>nul net use x: \\meinserver\meinefreigabe && @echo Ziel gemappt >> C:\scripts\save.log
:end
Ps:
C:\WINDOWS\system32\
kannst du dir schenken, denn "C:\WINDOWS\system32\" ist / sollte im Pfad stehen - ein
ntbackup.exe meineparameter
reicht in dem Fall auch bzw.
%windir%\system32\ntbackup.exe
"passt immer -egal - wie der Ordner von Windows nun heißt.

Gruß
Schwinni79
Schwinni79 01.09.2008 um 16:45:49 Uhr
Goto Top
Hallo Timo,

das ist die kopierte Synatx von Windows aus dem Taskplaner. Habe sie mir gar nicht so genau angesehen.

Vielen Dank für deine ausführliche Hilfe - ich werde das Script etwas umstellen und wie oben beschrieben anpassen. Die CALL- Befehle brauche ich an dieser Stelle gar nicht...

Gruß
Michael
AndreasHoster
AndreasHoster 01.09.2008 um 17:15:42 Uhr
Goto Top
Wo: Direkt nach dem Befehl, bei dem ein Fehler auftreten kann.
Beispiel:
ping DNS-Name
if errorlevel 1 exit /b
net send %computername% Ping erfolgreich
Wenn Ping erfolgreich ein Paket verschickt und eine Antwort bekommt, gibt Ping Errorlevel 0 zurück. Falls keine Antwort zurückkommt, dann gibt ping Errorlevel 1 zurück.
Und mit IF frage ich das ab und beende es entweder mit exit oder schicke ein Net send.