Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

In batch erfolgreiches entpacken prüfen

Frage Entwicklung Batch & Shell

Mitglied: RaidMan

RaidMan (Level 1) - Jetzt verbinden

10.07.2013, aktualisiert 12:29 Uhr, 2440 Aufrufe, 14 Kommentare, 1 Danke

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
Mitglied: colinardo
10.07.2013, aktualisiert um 12:12 Uhr
Hallo RaidMan,
der Errorlevel scheint deshalb nicht korrekt zu sein weil du innerhalb von Klammern für den Errorlevel DelayedExpansion benutzen musst.

01.
setlocal ENABLEDELAYEDEXPANSION
die Abfrage des ErrorLevels erfolgt dann direkt nach dem Entpackbefehl von 7Zip so
if !ERRORLEVEL! GTR 0 goto ERROR
Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
Bitte warten ..
Mitglied: RaidMan
10.07.2013 um 12:59 Uhr
hi Uwe


dein Vorschlag funktioniert schonmal gut

mir war setlocal ENABLEDELAYEDEXPANSION nicht bekannt
kannst du das in Küze erklären?

if !ERRORLEVEL! GTR 0 goto ERROR
dann wäre
if !ERRORLEVEL! EQU 0 del *.rar
der logische nächste Befehl in der batch?
Bitte warten ..
Mitglied: Snowman25
10.07.2013, aktualisiert um 13:05 Uhr
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?

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
Bitte warten ..
Mitglied: RaidMan
10.07.2013, aktualisiert um 13:10 Uhr
Hi Snowman

hm ich war jetzt der Meinung ERRORLEVEL=0 bedeutet Program erfolgreich beendet,
also in diesem Fall erfolgreich entpackt?


RaidMan
Bitte warten ..
Mitglied: colinardo
10.07.2013 um 13:12 Uhr
mir war setlocal ENABLEDELAYEDEXPANSION nicht bekannt
kannst du das in Küze erklären?
http://ss64.com/nt/delayedexpansion.html

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
Bitte warten ..
Mitglied: Snowman25
10.07.2013 um 13:20 Uhr
Ja, das stimmt auch. Und wenn du davor alles umleitest, was NICHT 0 ist, dann wird die Zeile unter dem ERRORLEVEL-Check nur bei ErrorLevel 0 ausgeführt.
Bitte warten ..
Mitglied: RaidMan
10.07.2013 um 13:30 Uhr
ersteinmal Danke euch Beiden

das mit dem ERRORLEVEL ist jetzt klar und somit ist die Eingangsfrage beantwortet

und für "ENABLEDELAYEDEXPANSION" muss ich jetzt mal lesen

Danke
Bitte warten ..
Mitglied: bastla
10.07.2013 um 15:06 Uhr
@ colinardo
Wenn es nur darum geht, festzustellen ob der Errorlevel 0 oder eben nicht war, bieten sich entweder "&&" / "||" oder auch "if not errorlevel 1" / "if errorlevel 1" an - funktioniert beides innerhalb von Schleifen ganz ohne "delayedExpansion" ...

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
10.07.2013, aktualisiert um 15:48 Uhr
hi bastla,
du sprichst zwar direkt colinardo an, ABER mich interessierts aber natürlich auch
nur kann ich deine Vorschläge nicht direkt umsetzen,
also wie müsste denn nach deiner Version der folgende Code geändert werden

@echo off
setlocal ENABLEDELAYEDEXPANSION

if exist %3%1\*.rar (
cd %3%1
c:\tools\WinRAR\UnRAR.exe x -pxxxx *.rar *.* %2%1\
if !ERRORLEVEL! GTR 0 goto next1
if !ERRORLEVEL! EQU 0 (
del *.rar
goto ende
)
:next1
c:\tools\WinRAR\UnRAR.exe x -pxxxxxxx *.rar *.* %2%1\
if !ERRORLEVEL! GTR 0 goto next2
if !ERRORLEVEL! EQU 0 (
del *.rar
goto ende
)
:next2
c:\tools\WinRAR\UnRAR.exe x -pxxxxxxxxxx *.rar *.* %2%1\
if !ERRORLEVEL! GTR 0 goto ERROR
if !ERRORLEVEL! EQU 0 (
del *.rar
goto ende
)
)

if exist %3%1\*.zip (
md %2%1
cd %3%1
c:\tools\7z4cmd\7za x -o%2%1\ *.zip
if !ERRORLEVEL! GTR 0 goto ERROR
if !ERRORLEVEL! EQU 0 (
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
Bitte warten ..
Mitglied: bastla
10.07.2013, aktualisiert um 19:05 Uhr
Hallo RaidMan!

Sollte eigentlich so genügen (ungetestet):
01.
@echo off & setlocal  
02.
 
03.
if exist %3%1\*.rar ( 
04.
    cd /d %3%1 2>nul || (echo Pfad %3%1 nicht gefunden! & echo\ & goto :ERROR) 
05.
    c:\tools\WinRAR\UnRAR.exe x -pxxxx *.rar *.* %2%1\ && (del *.rar & goto :ende) 
06.
    c:\tools\WinRAR\UnRAR.exe x -pxxxxxxx *.rar *.* %2%1\ && (del *.rar & goto :ende) 
07.
    c:\tools\WinRAR\UnRAR.exe x -pxxxxxxxxxx *.rar *.* %2%1\ && (del *.rar & goto :ende) 
08.
09.
 
10.
if exist %3%1\*.zip ( 
11.
    md %2%1 2>nul || (echo Pfad %2%1 konnte nicht erstellt werden! & echo\ & goto :ERROR) 
12.
    cd /d %3%1 2>nul || (echo Pfad %3%1 nicht gefunden! & echo\ & goto :ERROR) 
13.
    c:\tools\7z4cmd\7za x -o%2%1\ *.zip && (del *.zip & goto :ende) 
14.
15.
 
16.
:ERROR 
17.
echo =================================================== 
18.
echo. 
19.
echo ein Feeeeeeeeehler ist beim entpacken aufgetreten 
20.
echo. 
21.
echo =================================================== 
22.
pause 
23.
 
24.
:ende 
25.
echo =================================================== 
26.
echo. 
27.
echo alles ist gut.... Dateien nach %2%1\ entpackt 
28.
echo. 
29.
echo =================================================== 
30.
 
31.
pause
Grüße
bastla
Bitte warten ..
Mitglied: Biber
10.07.2013, aktualisiert um 20:13 Uhr
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

"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
Bitte warten ..
Mitglied: RaidMan
11.07.2013, aktualisiert um 11:09 Uhr
Hi

der bastla hat meinen schönen batch code ja total eingedampft :O

kurz und bündig so liebe ich es...
aber ich bin wohl nicht auf dem laufenden, das mit den vielen "&" versteh ich nicht so recht
und etwas was an eine ERRORLEVEL Abfrage erinnert erkenn ich auch nicht mehr ?

uhhhh wer hilft mir da mal das zu verstehen bitte

es soll auf jeden Fall verhindert werden, das eine Archivdatei gelöscht wird die nicht wirklich komplett entpackt wurde

ein ratsuchender
RaidMan
Bitte warten ..
Mitglied: bastla
11.07.2013, aktualisiert um 11:37 Uhr
Hallo RaidMan!
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 "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 mit
Anweisung && echo Anweisung wurde mit Errorlevel 0 beendet || echo Anweisung endete mit einem Errorlevel <> 0
realisieren - bei Bedarf auch mehrzeilig:
01.
Anweisung && ( 
02.
    echo Anweisung wurde mit Errorlevel 0 beendet 
03.
    echo weitere Arbeitsschritte 
04.
) || ( 
05.
    echo Anweisung endete mit einem Errorlevel <> 0 
06.
    echo weitere Arbeitsschritte 
07.
)
- siehe dazu unter "Using multiple commands and conditional processing symbols".

Die dritte Möglichkeit sei der Vollständigkeit halber auch nochmals erwähnt:
01.
Anweisung 
02.
if errorlevel 1 ( 
03.
    echo Anweisung endete mit einem Errorlevel <> 0 
04.
    echo weitere Arbeitsschritte 
05.
) else ( 
06.
    echo Anweisung wurde mit Errorlevel 0 beendet 
07.
    echo weitere Arbeitsschritte 
08.
)
Damit lassen sich auch verschiedene Errorlevel unterscheiden:
01.
Anweisung 
02.
if errorlevel 2 ( 
03.
    echo Anweisung endete mit einem Errorlevel >= 2 
04.
    echo weitere Arbeitsschritte 
05.
    goto :eof 
06.
07.
if errorlevel 1 ( 
08.
    echo Anweisung endete mit Errorlevel 1 
09.
    echo weitere Arbeitsschritte 
10.
    goto :eof 
11.
12.
echo Anweisung wurde mit Errorlevel 0 beendet 
13.
echo weitere Arbeitsschritte
Bitte beachten: Es wird so immer auf "Errorlevel >= Vergleichswert" abgefragt, daher immer in absteigender Reihenfolge verwenden.

Ein
if errorlevel 0
ist natürlich überhaupt sinnlos ...

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
11.07.2013, aktualisiert um 11:56 Uhr
Hi bastla und Biber

das nenn ich mal eine ausführliche und sachliche Antwort
werd ich gleich mal abarbeiten ...

allerbesten Dank dafür

RaidMan
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Winrar entpacken - Probleme bei Pfad (7)

Frage von Concurve zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch um mehrere IP-Adressen via Ping auf Erreichbarkeit zu prüfen (5)

Frage von Galindiesel zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...