剧本:

剧本:

我想提取文件夹及其子文件夹中的所有 .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。

相关内容