37414
15.05.2020, aktualisiert um 18:12:56 Uhr
4054
21
0
Batchdatei mit Antwort auf eine Frage per Errorlevel realisieren?
Hallo,
ich habe mal eine Frage zu ERRORLEVEL.
Und zwar nutze ich eine Batchdatei, die ein paar Verzeichnisse sichert.
Am Ende dieser Datei stelle ich (hier nur als Beispiel) die Frage, ob das Logfile geöffnet werden soll oder nicht.
Dazu nutze ich eine Ja/Nein Abfrage mit CHOICE. Eine bessere Möglichkeit ist mir zunächst mal nicht eingefallen.
Das funktioniert aber auf jeden fall so auch...
Nun 2 Fragen:
1) würdet Ihr das auch so lösen oder gibt es eine bessere Möglichkeit für eine solche Abfrage mit Ja/Nein?
2) wie würde ich denn jetzt einen wirklichen Fehler abfragen? Damit meine ich einen Fehler beim Kopiervorgang in der Form, dass mir z.B. gemeldet wird "Kopiervorgang erfolgreich", wenn kein Fehler aufgetaucht ist und "Kopiervorgang fehlgeschlagen", wenn ein Fehler auftrat.
Kann ich dazu ein weiteres ERRORLEVEL einsetzen und wenn ja... wie wäre es sinnvoll?
Spontan würde ich es so machen, wie bei der Abfrage unten auch
Gruß,
imebro
ich habe mal eine Frage zu ERRORLEVEL.
Und zwar nutze ich eine Batchdatei, die ein paar Verzeichnisse sichert.
Am Ende dieser Datei stelle ich (hier nur als Beispiel) die Frage, ob das Logfile geöffnet werden soll oder nicht.
Dazu nutze ich eine Ja/Nein Abfrage mit CHOICE. Eine bessere Möglichkeit ist mir zunächst mal nicht eingefallen.
Das funktioniert aber auf jeden fall so auch...
Nun 2 Fragen:
1) würdet Ihr das auch so lösen oder gibt es eine bessere Möglichkeit für eine solche Abfrage mit Ja/Nein?
2) wie würde ich denn jetzt einen wirklichen Fehler abfragen? Damit meine ich einen Fehler beim Kopiervorgang in der Form, dass mir z.B. gemeldet wird "Kopiervorgang erfolgreich", wenn kein Fehler aufgetaucht ist und "Kopiervorgang fehlgeschlagen", wenn ein Fehler auftrat.
Kann ich dazu ein weiteres ERRORLEVEL einsetzen und wenn ja... wie wäre es sinnvoll?
Spontan würde ich es so machen, wie bei der Abfrage unten auch
Gruß,
imebro
robocopy %Quelle% %Ziel% /MIR /NP /DST /MT:4 /R:3 /W:10 /LOG:%Logfile%
CHOICE /N /C JN /M ". Soll das Logfile geöffnet werden? --> (J)a, (N)ein: "
if errorlevel 2 goto :ENDE
if errorlevel 1 goto :WEITER
:ENDE
echo. Die Datei wird mit ENTER beendet
pause > NUL
goto :EOF
:WEITER
start notepad %Logfile%
echo.
echo. Das Logfile wurde gestartet
echo.
echo. Die Sicherungsdatei wird mit ENTER beendet
pause > NUL
:EOF
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 572082
Url: https://administrator.de/contentid/572082
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
21 Kommentare
Neuester Kommentar
Hallo,
https://support.microsoft.com/de-de/help/954404/return-codes-that-are-us ...
Gruß,
Peter
Zitat von @37414:
2) wie würde ich denn jetzt einen wirklichen Fehler abfragen? Damit meine ich einen Fehler beim Kopiervorgang in der Form, dass mir z.B. gemeldet wird "Kopiervorgang erfolgreich", wenn kein Fehler aufgetaucht ist und "Kopiervorgang fehlgeschlagen", wenn ein Fehler auftrat.
ERRORLEVEL immer Direkt nach dem Ereigniss abfragen danach ann es schon nicht mehr Gültig sein. Ung erzeugt dein Code (hier Robocopy) denn ein Errorlevel? https://ss64.com/nt/robocopy-exit.html2) wie würde ich denn jetzt einen wirklichen Fehler abfragen? Damit meine ich einen Fehler beim Kopiervorgang in der Form, dass mir z.B. gemeldet wird "Kopiervorgang erfolgreich", wenn kein Fehler aufgetaucht ist und "Kopiervorgang fehlgeschlagen", wenn ein Fehler auftrat.
https://support.microsoft.com/de-de/help/954404/return-codes-that-are-us ...
robocopy %Quelle% %Ziel% /MIR /NP /DST /MT:4 /R:3 /W:10 /LOG:%Logfile%
If Errorlevel....
Gruß,
Peter
Hallo,
https://en.wikipedia.org/wiki/Choice_(command) und J/N ist da schon standard http://www.antonis.de/dos/batchtut/bat-kurs/#19
Gruß,
Peter
Zitat von @37414:
In meinem Beispiel mußte ich ja zunächst die CHOICE-Abfrage machen, da sich die ERRORLEVEL-Abfrage ja daruf bezieht.
Das ist eine von Robocopy vollkommen unabhängige sache.In meinem Beispiel mußte ich ja zunächst die CHOICE-Abfrage machen, da sich die ERRORLEVEL-Abfrage ja daruf bezieht.
Also Robocopy würde ja den Rückgabe-Code 1 geben (Alle Dateien wurden erfolgreich kopiert.).
Dann müßte ich doch eigentlich auch eine Fehlerabfrage - direkt hinter dem Kopiervorgang - wie folgt machen können:
Ja, aber wenn du auf 1 Testest hat sich das erübrigt. ! Bedeutet bei Robocopy Erfolgreich, keine Fehler....Dann müßte ich doch eigentlich auch eine Fehlerabfrage - direkt hinter dem Kopiervorgang - wie folgt machen können:
Aber wie setze ich meine Ja/Nein-Abfrage mit CHOICE nun noch dazu?
Ganz normal wie ín deiner Frage, mal https://www.robvanderwoude.com/choice.php Lesen oder im CMD Fenster ein Choice /? absetzten. https://docs.microsoft.com/de-de/windows-server/administration/windows-c ...https://en.wikipedia.org/wiki/Choice_(command) und J/N ist da schon standard http://www.antonis.de/dos/batchtut/bat-kurs/#19
Gruß,
Peter
Der output "Protokolldatei: D:\Desktop\BACKUP\Robocopy-Logs\Batch-Vorlage_LOG.txt" wird duch den parameter "/LOG:%Logfile%" verursacht.
Wenn du den vollen robocopy output im Log und im Dos Fenster haben willst kannst den parameter /tee einsetzen
Wenn du garkeinen output im Dos Fenster willst kannst es ja ins schwarze loch schicken (also nut den output)
Wenn du den vollen robocopy output im Log und im Dos Fenster haben willst kannst den parameter /tee einsetzen
Wenn du garkeinen output im Dos Fenster willst kannst es ja ins schwarze loch schicken (also nut den output)
robocopy %Quelle% %Ziel% /MIR /NP /DST /MT:4 /R:3 /W:10 /LOG:%Logfile%> Nul
Hallo,
Gruß,
Peter
Zitat von @37414:
Vor allem habe ich keine Ahnung, wo unten die beiden Reihen mit "***" herkommen und den Text "Die Sicherung wird mit ENTER beendet" gibt es in meiner Batch überhaupt nicht!!
Irgenwo wird es stehen. Aber wenn deine Information immer noch als Geheim eingestuft ist, wirst du selbst suchen müssen. Oder dein Rechner hat KI und will dir etwas sagen Vor allem habe ich keine Ahnung, wo unten die beiden Reihen mit "***" herkommen und den Text "Die Sicherung wird mit ENTER beendet" gibt es in meiner Batch überhaupt nicht!!
Eigentlich müßte es nach dem Kopiervorgang doch weitergehen mit der Meldung "Der Kopiervorgang war erfolgreich" (siehe Codezeile 18).
Da wir nicht dein ganzes Projekt und dessen Inhalte kennen können wir dir dies weder bestätigen noch verneinen....Wieso funktioniert das so nicht?
Was schreibt dein Robocopy LOG? Welche Zeit hat es gebraucht? Und sicher das dein LOG korrekt gefüllt ist?Gruß,
Peter
Ja, nach
Hast doch eine pause das ist doch logisch das der text da stehen bleibt und nich weiter geht bis man eine taste drückt.
Der unten eingefügte text soviel ich verstanden habe ist die zusmmenfassung von robocopy die wird normalerweise immer gezeigt es sei den du nutzt den /njs (No Job Summary) parameter.
echo. Die Sicherung wird mit ENTER beendet
pause > NUL
Hast doch eine pause das ist doch logisch das der text da stehen bleibt und nich weiter geht bis man eine taste drückt.
Der unten eingefügte text soviel ich verstanden habe ist die zusmmenfassung von robocopy die wird normalerweise immer gezeigt es sei den du nutzt den /njs (No Job Summary) parameter.
Also hier hast du die If's falsch eingesetzt:
Statt:
So:
Auf line 54 in deinem code ist es doch:
Ich glaube du setzt :EOF falsch ein weist du was das bedeutet?
"End of Function" Also nachdem du eine funktion mit call oder goto rufst sagst du dann mit :EOF das die funktion zu ende ist und man wieder da weitermachen soll von wo die funktion gerufen wurde also in der nächsten line gleich nach dem call oder goto.
Du hast 2 mal die Funktion :PAUSE in deinem code das darf man nicht da müstest du eine umbennen in :Pause2 oder so. Das gleiche mit :Weiter
Wenn du willst das robocopy nicht kopiert sondern nur die Dateien "Listet" die es Kopieren wuerde must du das /L vor dem >nul positioniren.
Statt:
So:
Also dieser teil macht nicht so viel sinn fuer mich (gleich nach dem robocopy):
if errorlevel 1 goto :FEHLER
Da die errorcodes für robocopy wie gefolgt verlaufen:
0 = Keine fehler und keine Dateien Kopiert
1 = Eine oder mehrere Dateien wurden erfolgreich Kopiert
2 = Extra Dateien oder Directories wurden festgestellt. Bitte logfile ueberpruefen fuer mehr Details
4 = Unpassende Dateien oder Directories wurder festgestellt. Bitte logfile ueberpruefen fuer mehr Details.
8 = Einige Dateien konnten nicht Kopiert werden und der wiederholunslimit wurde erreicht.
16 = Robocopy hat keine Dateien Kopiert, verifiziere die comando parameter und ob robocopy genug rechte hat.
Ich hab eine version mit einigen verbesserungen gemacht wenn du sie ausprobieren willst:
BackupImebro.zip
Statt:
if errorlevel 2 goto :PAUSE
if errorlevel 1 goto :WEITER
if %errorlevel% EQU 2 goto :PAUSE
if %errorlevel% EQU 1 goto :WEITER
Auf line 54 in deinem code ist es doch:
echo. Die Sicherung wird mit ENTER beendet
Ich glaube du setzt :EOF falsch ein weist du was das bedeutet?
"End of Function" Also nachdem du eine funktion mit call oder goto rufst sagst du dann mit :EOF das die funktion zu ende ist und man wieder da weitermachen soll von wo die funktion gerufen wurde also in der nächsten line gleich nach dem call oder goto.
Du hast 2 mal die Funktion :PAUSE in deinem code das darf man nicht da müstest du eine umbennen in :Pause2 oder so. Das gleiche mit :Weiter
Wenn du willst das robocopy nicht kopiert sondern nur die Dateien "Listet" die es Kopieren wuerde must du das /L vor dem >nul positioniren.
Statt:
robocopy %Quelle% %Ziel% /MIR /NP /DST /MT:4 /R:3 /W:10 %excludes% /LOG:%Logfile% > Nul /L
robocopy %Quelle% %Ziel% /MIR /NP /DST /MT:4 /R:3 /W:10 /L %excludes% /LOG:%Logfile% > Nul
Also dieser teil macht nicht so viel sinn fuer mich (gleich nach dem robocopy):
if errorlevel 1 goto :FEHLER
Da die errorcodes für robocopy wie gefolgt verlaufen:
0 = Keine fehler und keine Dateien Kopiert
1 = Eine oder mehrere Dateien wurden erfolgreich Kopiert
2 = Extra Dateien oder Directories wurden festgestellt. Bitte logfile ueberpruefen fuer mehr Details
4 = Unpassende Dateien oder Directories wurder festgestellt. Bitte logfile ueberpruefen fuer mehr Details.
8 = Einige Dateien konnten nicht Kopiert werden und der wiederholunslimit wurde erreicht.
16 = Robocopy hat keine Dateien Kopiert, verifiziere die comando parameter und ob robocopy genug rechte hat.
- Also so zusagen Wenn Erfolgreich gehe zu Fehler...
Ich hab eine version mit einigen verbesserungen gemacht wenn du sie ausprobieren willst:
BackupImebro.zip
Hallo,
Auch ist dies ziemlicher Blödsinn, da deine Batch Datein von oben nach unten und von Links nach Rechts abearbeitet werden. Erst ein Umleitung mittels > NUL und dann erst Parameter? Und auch deine PAUSE > NUL ist ziemlich verwirrend, da dein Pause ja auf jeden fall wartet und es so am Bildschirm stehen soll. Du Willst das unterdrücken? Dann nutze keine Pause. Aber bei Batch war/ist das eben so. In heutigen OSen gibt es weitaus besserer und vielfältigere möglichkeiten. Da wäre Powershell...
Gruß,
Peter
Zitat von @37414:
wieso die weiteren Abfragen nicht ausgegeben werden und woher der unten eingefügte Text stammt?
Lasse deine > NUL weg und auch deine ECHO OFF. Dann soltest du sehen was tatsächlich bei dir passiert.wieso die weiteren Abfragen nicht ausgegeben werden und woher der unten eingefügte Text stammt?
Auch ist dies ziemlicher Blödsinn, da deine Batch Datein von oben nach unten und von Links nach Rechts abearbeitet werden. Erst ein Umleitung mittels > NUL und dann erst Parameter? Und auch deine PAUSE > NUL ist ziemlich verwirrend, da dein Pause ja auf jeden fall wartet und es so am Bildschirm stehen soll. Du Willst das unterdrücken? Dann nutze keine Pause. Aber bei Batch war/ist das eben so. In heutigen OSen gibt es weitaus besserer und vielfältigere möglichkeiten. Da wäre Powershell...
Gruß,
Peter
Hallo,
Gruß,
Peter
Zitat von @37414:
bin soeben dabei, Deine Batch nachzuvollziehen.
Dazu braucht man noch nicht mal einen PC oder Rechner. Das geht mit Papier und Bleistift. bin soeben dabei, Deine Batch nachzuvollziehen.
Aber ich verstehe das mit der Variablen für Errorlevel noch nicht und... was bedeutet dieser Zusatz "EQU"?
Gib mal in deinen Browser als Suchbgriff "Batch EQU" ein und lies dich schlau.Gruß,
Peter