for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
Ich nehme an zip1 Datei aus Ihrem Beispiel ist zip1.zip und dass es könnte mehr Zip-Dateien in jedem Unterordner sein . Wenn nicht, funktioniert dies auch für eine Zip-Datei. Und es gibt eine Alternative am Ende des Skripts für Zip-Dateien w/o .zip
Diese Dateien, die ich für einen Test verwendet. Es gibt einen absichtlichen Platz im "Unterordner", weil es immer gut ist, Batch-Skript gegen Pfadnamen mit Leerzeichen zu testen.
C:\temp\folder\sub folder1\zip1.zip
C:\temp\folder\sub folder1\zip1b.zip
C:\temp\folder\subfolder2\zip2.zip
C:\temp\folder\subfolder2\zip2b.zip
C:\temp\folder\subfolder3\zip3.zip
C:\temp\folder\subfolder3\zip3b.zip
C:\temp\folder\subfolder4\zip4.zip
C:\temp\folder\subfolder4\zip4b.zip
entpacken ist kein Windows-Befehl. Es kann von vielen Quellen kommen und so könnte das Format seiner Parameter abweichen. In meinem Beispiel verwende ich 7zip.
Wie auch immer, wahrscheinlich müssen Sie das Ausgabeverzeichnis mit einem beliebigen Unzip-Dienstprogramm (oder CD dazu) angeben. Mein Beispiel zeigt, wie man seinen Namen erhält. Es gibt einen Schrägstrich am Ende, der mit 7z in Ordnung ist, aber könnte ein Problem mit anderen Dienstprogramm sein. Es ist möglich, es loszuwerden, aber es würde mehr Code erfordern.
Sie haben gebeten, alle Zip-Dateien in ein eigenes Verzeichnis zu extrahieren. Wenn jedoch zwei Zip-Dateien Dateien mit demselben Namen enthalten, überschreiben sie sich gegenseitig. Daher ist es möglicherweise sinnvoller, jede Zip-Datei in einen eigenen Ordner mit demselben Namen wie die ZIP-Datei zu extrahieren. Dazu muss der Ordner erstellt werden und das gesamte Skript würde mehr als eine Zeile verdienen.
Es gibt ein Misstrauen gegen für/d
Deshalb habe ich für/f Version auch enthalten, die
Bei dir-Befehl verwenden, würden Sie diesen Befehl mehr rekursiv verwenden möchten, mit tiefer Pfade, wie: folder\subfolder3\more\paths\zip1.zip
, ist dies möglich. Verwenden Sie einfach das for /f
aus meinem Beispiel unten und fügen Sie zum dir
Befehl hinzu: 'dir *.* /s /ad /b'
.
Dieser Befehl sollte das tun, was Sie gefragt:
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"
und hier ist die gesamte Testfall Skript:
@echo off
echo ******
echo List all zip files using for /f
echo ******
for /f "tokens=*" %%r in ('dir *.* /ad /b') do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
echo.
echo ******
echo List all zip files using for /d
echo ******
for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
echo.
echo 1: extract to folders containing zip files - possible overwrites
echo 2: extract each zip to a folder named by the name of the zip file
choice /c 12
if not errorlevel 2 (
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"
) else (
rem ------ this is the alternative to extract each zip to its own folder
for /d %%r in (*) do for %%s in ("%%r\*.zip") do (
echo.
echo ******
echo *** Unzipping: %%s to folder: %%~dpns
mkdir "%%~dpns"
7z x -y "%%s" -o"%%~dpns"
)
rem ------
)
pause
exit /b
In case zip files does not have .zip extension:
for /d %%r in (*) do for %%s in ("%%r\*.*") do (
echo.
echo ******
echo *** Unzipping: %%s to folder: %%~dpns-unzipped
mkdir "%%~dpns-unzipped"
7z x -y "%%s" -o"%%~dpns-unzipped"
)
'unzip' ist nicht Standard-Windows-Befehl. Woher kommt es? – npocmaka
'(* /% RR)' kann nicht funktionieren. Ein Platzhalter in einem Pfad wird vom Windows-Befehlsinterpreter nicht unterstützt. Das zweite Prozentzeichen fehlt, was offensichtlich ein Tippfehler ist, da es zwei "R" statt zwei "%" gibt. Und das Verzeichnistrennzeichen unter Windows ist der umgekehrte Schrägstrich und nicht der Schrägstrich. So viele Fehler in einer so kurzen Linie. Haben Sie jemals in einem Eingabeaufforderungsfenster 'for /?' Ausgeführt und die Ausgabehilfe für diesen Befehl gelesen? – Mofi
schön Ich wusste nicht über diesen Hilfe-Befehl Danke, ich habe die ursprüngliche Antwort mit diesem Befehl bearbeitet, nur um die Frage zu verbessern, aber ich fügte was immer ich zuletzt in der Batch-Datei versucht in Fiedeln mit den Befehlen. – Snickdx