我想提取文件夹及其子文件夹中的所有 .zip 和 .rar
结构如下:
MAIN_FOLDER
-A folder
- a.zip
-a.rar
-B folder
- b.zip
-b.rar
-C folder
....
...
我已经尝试过这个,但没有用
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
)
我使用 Windows 并安装了 7-Zip。
附加问题:是否可以将从最后的子文件夹(a.rar,b.rar)中提取的所有文件保存在同一个文件夹(主文件夹)中?
答案1
剧本:
for /F %%I IN ('dir /b /s *.zip *.rar') DO (
"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)
解释:
for /F %%I IN ('dir /b /s *.zip *.rar') DO (
这将对命令返回的每个文件执行循环dir /b /s *.zip *.rar
。/s
指示dir
递归到子目录并/b
以裸格式打印。
文件名存储在%%I
变量中以供稍后使用。如果您在提示符下输入此内容,则可以使用%I
。
"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
这将执行提取操作。该参数-o"%%~dpI"
将文件提取到存档所在的同一目录中。其他选项:
-o"%%~dpI"
— 解压到档案所在的目录。-o"%%~dpnI"
— 在以档案命名的层次结构中创建一个新目录并在那里提取(即AFolder\archive.zip
提取到AFolder\archive\
)。-o"%%~nI"
— 在当前目录中创建以档案命名的新目录并在那里提取(即AFolder\archive.zip
提取到.\archive\
)。省略参数
-o
—提取到当前目录。
例子:
C:\Temp>tree /F
Folder PATH listing
Volume serial number is 08A4-22E0
C:.
│ batch.bat
│
├───AFolder
│ a.zip
│
├───BFolder
│ b.zip
│
└───CFolder
c.zip
C:\Temp>batch.bat > nul
C:\Temp>tree /F
Folder PATH listing
Volume serial number is 08A4-22E0
C:.
│ batch.bat
│
├───AFolder
│ a.zip
│ a.zip.txt
│
├───BFolder
│ b.zip
│ b.zip.txt
│
└───CFolder
c.zip
c.zip.txt
答案2
这是已接受答案的更新,以支持带空格的文件名(“DELIMS=”)和跳过覆盖(-aos)。请参阅下面的链接和更新的代码。谢谢
使用 .bat 文件或 dos 命令提取目录中的所有 Zip 文件(包括子文件夹) https://stackoverflow.com/questions/12487491/how-to-handle-space-of-filename-in-batch-for-loop http://7zip.bugaco.com/7zip/MANUAL/switches/overwrite.htm
for /F "DELIMS=" %%I IN ('dir /b /s *.zip *.rar') DO (
"H:\Program Files\7-Zip\7z.exe" x -aos -o"%%~dpI" "%%I"
)
答案3
我相信你正在寻找命令forfiles
:
forfiles /s /m *.zip /c "7z x @file"
forfiles /s /m *.rar /c "7z x @file"
答案4
7z e -an -air!*.rar -r
将当前目录子文件夹中的所有 rar 文件(递归)提取到当前文件夹中。对于 zip 文件,请更改为 -air!*.zip。