In batch erfolgreiches entpacken prüfen
Hallo Kenner und Könner
ich suche nach einem Möglichkeit wie ich das erfolgreiche entpacken von zip oder rar Dateien in einer batch prüfen kann, damit danach gefahrlos die Archivdatein gelöscht werden können.
Das entpacken selbst funktioniert mit folgendem Code prima
if exist %3%1\*.rar (
cd %3%1
c:\tools\WinRAR\UnRAR.exe x -p"xxxx" *.rar *.* %2%1\
c:\tools\WinRAR\UnRAR.exe x -p"xxxxxxxx" *.rar *.* %2%1\
)
if exist %3%1\*.zip (
md %2%1
cd %3%1
c:\tools\7z4cmd\7za.exe x -o%2%1\ *.zip
)
ich würde nur auch noch gleich die Archive löschen wollen
mit ERRORLEVEL komm ich nicht weiter ....
weil 0 gibt es auch wen abgebrochen wurde zB
hat da jemand eine Idee?
und schonmal Danke fürs lesen
ich suche nach einem Möglichkeit wie ich das erfolgreiche entpacken von zip oder rar Dateien in einer batch prüfen kann, damit danach gefahrlos die Archivdatein gelöscht werden können.
Das entpacken selbst funktioniert mit folgendem Code prima
if exist %3%1\*.rar (
cd %3%1
c:\tools\WinRAR\UnRAR.exe x -p"xxxx" *.rar *.* %2%1\
c:\tools\WinRAR\UnRAR.exe x -p"xxxxxxxx" *.rar *.* %2%1\
)
if exist %3%1\*.zip (
md %2%1
cd %3%1
c:\tools\7z4cmd\7za.exe x -o%2%1\ *.zip
)
ich würde nur auch noch gleich die Archive löschen wollen
mit ERRORLEVEL komm ich nicht weiter ....
weil 0 gibt es auch wen abgebrochen wurde zB
hat da jemand eine Idee?
und schonmal Danke fürs lesen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 211034
Url: https://administrator.de/forum/in-batch-erfolgreiches-entpacken-pruefen-211034.html
Ausgedruckt am: 02.02.2025 um 07:02 Uhr
14 Kommentare
Neuester Kommentar
Hallo RaidMan,
der Errorlevel scheint deshalb nicht korrekt zu sein weil du innerhalb von Klammern für den Errorlevel DelayedExpansion benutzen musst.
die Abfrage des ErrorLevels erfolgt dann direkt nach dem Entpackbefehl von 7Zip so
Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
der Errorlevel scheint deshalb nicht korrekt zu sein weil du innerhalb von Klammern für den Errorlevel DelayedExpansion benutzen musst.
setlocal ENABLEDELAYEDEXPANSION
if !ERRORLEVEL! GTR 0 goto ERROR
gelöste Beitrage bitte auch als solche markieren.Danke
Zitat von @RaidMan:
if !ERRORLEVEL! GTR 0 goto ERROR
dann wäre
if !ERRORLEVEL! EQU 0 del *.rar
der logische nächste Befehl in der batch?
if !ERRORLEVEL! GTR 0 goto ERROR
dann wäre
if !ERRORLEVEL! EQU 0 del *.rar
der logische nächste Befehl in der batch?
Hallo @RaidMan,
ein einfaches
del *.rar
reicht aus. Deine Batch springt zum ERROR
-Label (Welches du am Ende der Batch definieren solltest), falls der Errorlevel über 0 liegt. Deshalb wird diese Zeile nur erreicht, wenn der Errorlevel 0 oder negativ war.Mehr dazu:
if /?
Gruß,
@Snowman25
mir war setlocal ENABLEDELAYEDEXPANSION nicht bekannt
kannst du das in Küze erklären?
http://ss64.com/nt/delayedexpansion.htmlkannst du das in Küze erklären?
Das sind die Rückgabewerte von 7Zip:
Code / Meaning
0 / No error
1 / Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.
2 / Fatal error
3 / change identified (does this indicate a change in the archive file itself or a difference when comparing archive file contents to the original source?)
7 / Command line error
8 / Not enough memory for operation
255 / User stopped the process
Hallo RaidMan!
Sollte eigentlich so genügen (ungetestet):
Grüße
bastla
Sollte eigentlich so genügen (ungetestet):
@echo off & setlocal
if exist %3%1\*.rar (
cd /d %3%1 2>nul || (echo Pfad %3%1 nicht gefunden! & echo\ & goto :ERROR)
c:\tools\WinRAR\UnRAR.exe x -pxxxx *.rar *.* %2%1\ && (del *.rar & goto :ende)
c:\tools\WinRAR\UnRAR.exe x -pxxxxxxx *.rar *.* %2%1\ && (del *.rar & goto :ende)
c:\tools\WinRAR\UnRAR.exe x -pxxxxxxxxxx *.rar *.* %2%1\ && (del *.rar & goto :ende)
)
if exist %3%1\*.zip (
md %2%1 2>nul || (echo Pfad %2%1 konnte nicht erstellt werden! & echo\ & goto :ERROR)
cd /d %3%1 2>nul || (echo Pfad %3%1 nicht gefunden! & echo\ & goto :ERROR)
c:\tools\7z4cmd\7za x -o%2%1\ *.zip && (del *.zip & goto :ende)
)
:ERROR
echo ===================================================
echo.
echo ein Feeeeeeeeehler ist beim entpacken aufgetreten
echo.
echo ===================================================
pause
:ende
echo ===================================================
echo.
echo alles ist gut.... Dateien nach %2%1\ entpackt
echo.
echo ===================================================
pause
bastla
Moin RaidMan,
Ich würde -auch ungetestet - in bastlas Skizze zwischen die beiden Blöcke :ERROR und :ENDE noch eine Zeile setzen. Bzw. als neue Zeile 23 schreiben:
"Goto :eof" benötigt KEINE Sprungmarke namens ":eof", sondern wird interpretiert als "Gehe zum übergeordneten Aufrufer" - wenn es keinen gibt, dann beende die Bachdatei.
Sonst hättest du bei Fehlern den verwirrenden Effekt, dass zuerst die "Feeeeeeeeehler"-Meldung kommt und nach dem Any-Key-Finden kommt dann :"alles bleibt gut ... Dateien nach dev/null/ entpackt" oder ähnlich.
Da bist du dann nur lästigen Fragen ausgesetzt.
Grüße
Biber
Ich würde -auch ungetestet - in bastlas Skizze zwischen die beiden Blöcke :ERROR und :ENDE noch eine Zeile setzen. Bzw. als neue Zeile 23 schreiben:
goto :eof
"Goto :eof" benötigt KEINE Sprungmarke namens ":eof", sondern wird interpretiert als "Gehe zum übergeordneten Aufrufer" - wenn es keinen gibt, dann beende die Bachdatei.
Sonst hättest du bei Fehlern den verwirrenden Effekt, dass zuerst die "Feeeeeeeeehler"-Meldung kommt und nach dem Any-Key-Finden kommt dann :"alles bleibt gut ... Dateien nach dev/null/ entpackt" oder ähnlich.
Da bist du dann nur lästigen Fragen ausgesetzt.
Grüße
Biber
Hallo RaidMan!
realisieren - bei Bedarf auch mehrzeilig:
- siehe dazu unter "Using multiple commands and conditional processing symbols".
Die dritte Möglichkeit sei der Vollständigkeit halber auch nochmals erwähnt:
Damit lassen sich auch verschiedene Errorlevel unterscheiden:
Bitte beachten: Es wird so immer auf "Errorlevel >= Vergleichswert" abgefragt, daher immer in absteigender Reihenfolge verwenden.
Ein
ist natürlich überhaupt sinnlos ...
Grüße
bastla
das mit den vielen "&" versteh ich nicht so recht
und etwas was an eine ERRORLEVEL Abfrage erinnert erkenn ich auch nicht mehr ?
Du kannst natürlich, um einen Errorlevel abzufragen, entweder die Variable "%errorlevel%" (oder mit "und etwas was an eine ERRORLEVEL Abfrage erinnert erkenn ich auch nicht mehr ?
delayedExpansion
" eben "!errorlevel!") verwenden - wenn es Dir aber genügt, zwischen "beendet mit Errorlevel 0" oder "beendet mit Errorlevel <> 0" zu unterscheiden, lässt sich das einfach mitAnweisung && echo Anweisung wurde mit Errorlevel 0 beendet || echo Anweisung endete mit einem Errorlevel <> 0
Anweisung && (
echo Anweisung wurde mit Errorlevel 0 beendet
echo weitere Arbeitsschritte
) || (
echo Anweisung endete mit einem Errorlevel <> 0
echo weitere Arbeitsschritte
)
Die dritte Möglichkeit sei der Vollständigkeit halber auch nochmals erwähnt:
Anweisung
if errorlevel 1 (
echo Anweisung endete mit einem Errorlevel <> 0
echo weitere Arbeitsschritte
) else (
echo Anweisung wurde mit Errorlevel 0 beendet
echo weitere Arbeitsschritte
)
Anweisung
if errorlevel 2 (
echo Anweisung endete mit einem Errorlevel >= 2
echo weitere Arbeitsschritte
goto :eof
)
if errorlevel 1 (
echo Anweisung endete mit Errorlevel 1
echo weitere Arbeitsschritte
goto :eof
)
echo Anweisung wurde mit Errorlevel 0 beendet
echo weitere Arbeitsschritte
Ein
if errorlevel 0
Grüße
bastla