Batch-Datei zeigt erfolgreiches Ereignis als Fehler an
Hallo zusammen
Habe hier eine Batch-Datei gebastelt, die automatisch einen Ordner erstellt und eine vorhandene Datei in diesen kopiert. Falls irgendwo ein Fehler auftaucht, soll zu "Fehler" gesprungen und auf eine Benutzereingabe gewartet werden. Doch das Erfolgreiche Kopieren wird als Fehler deklariert. Wo ist der Fehler? Hier die Batch:
@echo off
if errorlevel 1 goto Fehler
S:
if errorlevel 1 goto Fehler
md Temp
if errorlevel 1 goto Fehler
move S:\Backup.7z S:\Temp
if errorlevel 1 goto Fehler
:Fehler
echo FEHLER!!! FEHLER!!! FEHLER!!!
pause
Freue mich auf Antworten
Habe hier eine Batch-Datei gebastelt, die automatisch einen Ordner erstellt und eine vorhandene Datei in diesen kopiert. Falls irgendwo ein Fehler auftaucht, soll zu "Fehler" gesprungen und auf eine Benutzereingabe gewartet werden. Doch das Erfolgreiche Kopieren wird als Fehler deklariert. Wo ist der Fehler? Hier die Batch:
@echo off
if errorlevel 1 goto Fehler
S:
if errorlevel 1 goto Fehler
md Temp
if errorlevel 1 goto Fehler
move S:\Backup.7z S:\Temp
if errorlevel 1 goto Fehler
:Fehler
echo FEHLER!!! FEHLER!!! FEHLER!!!
pause
Freue mich auf Antworten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 258722
Url: https://administrator.de/contentid/258722
Ausgedruckt am: 08.11.2024 um 05:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
dir fehlt ein goto Sprung vor dem Fehlerabschnitt , da dieser ansonsten auch bei Erfolg abgearbeitet wird! Batch überspringt ja nicht von selbst einen Abschnitt...
Gruß jodel32
dir fehlt ein goto Sprung vor dem Fehlerabschnitt , da dieser ansonsten auch bei Erfolg abgearbeitet wird! Batch überspringt ja nicht von selbst einen Abschnitt...
goto ende
:Fehler
echo FEHLER!!! FEHLER!!! FEHLER!!!
pause
:ende
Doch vielleicht könntest du mir diesen Code erklären?
RD gibt keine Meldung aus, wenn das Löschen erfolgreich ist. Anderenfalls wird eine Fehlermeldung zu StdErr (Stream 2) geschrieben. Der lässt sich aber nicht per Pipe (|) an einen anderen Befehl übergeben. Darum ist es nötig StdErr mit dem leeren StdOut (Stream 1) zu vereinen. Das passiert mittels 2>&1
. Das heißt, der FINDSTR Befehl wird über die Pipe gestartet. Dieser detektiert nun, was bei ihm ankommt. Wenn irgend ein Zeichen (das bedeutet der Punkt hinter FINDSTR) gefunden wurde, dann ist FINDSTR erfolgreich und setzt Errorlevel 0. Wurde kein Zeichen gefunden (was der Fall ist, wenn es keine Fehlermeldung gab) ist FINDSTR nicht erfolgreich und der Errorlevel wird auf 1 gesetzt. So kommt die umgekehrte Logik zustande.Grüße
rubberman