How do I extract multiple archives in contained in subdirectories in a folder, outputting the results back into the folders where the archives are.
Firstly, install 7-zip.
bat file in the root of the directory containing many subdirectories with archives inside. Then paste the following in:
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F FOR %%X in (*.rar *.zip) DO ( "C:\Program Files\7-zip\7z.exe" x "%%X" ) popd )
Launch the bat, and all rar's/zips will be extracted into the folder they are contained in.
How does this work?
FOR /D /r %%F in ("*") DO (
For loop to loop through all folders in the current directory, and put the path into a variable
Put the current directory that we are in into memory.
Set the folder from variable
%%Fas the current directory.
FOR %%X in (*.rar *.zip) DO (
For all the
zipfiles in the current folder, do:
"C:\Program Files\7-zip\7z.exe" x "%%X"
Run 7-zip on the files. Quotes are needed around
%%Xbecause some file names have spaces in them.
Return to the previous directory that we previously stored in the memory.
Hope this is useful to someone.
I had problem running the script from Windows Vista. When I ran the code nothing happend. I needed to be administrator to be able to run the script. When I right clicked on the .bat file and "run as administrator" it didn't work because it for some reason started in the system32 folder (if I remember correctly). To solve this simply use the Windows Environment variable (explained here: Windows Environment Variables) %~dp0 to switch back to the directory that the script was run from.
@echo on cd %~dp0 FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F FOR %%X in (*.rar *.zip) DO ( "C:\Program Files\7-zip\7z.exe" x %%X ) popd )
Make sure no *.rar or *.zip files are at the same level as the script. They should be one level down.
I hope this comment helped someone.
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
Starts a recursive search at the current directory, finds all files ending in .zip, then pipes that into a loop. For every file it finds, it runs an unzip command on the file with the output shunted to the file's directory.
The answers above work, however, if you are running
Windows 64-bit and
7-Zip 32-bit, the correct path is
C:\Program Files (x86)\7-Zip for 7-Zip. Below is the script that worked for me.
@echo on cd %~dp0 FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F FOR %%X in (*.rar *.zip) DO ( "C:\Program Files (x86)\7-zip\7z.exe" x %%X ) popd )