使用 .bat 文件或 dos 命令提取目录(包括子文件夹)中的所有 Zip

Ema*_*ail 6 windows command-line batch-file 7-zip

我想提取文件夹及其子文件夹中的所有 .zip 和 .rars

结构是这样的:

MAIN_FOLDER
    -A folder
        - a.zip
            -a.rar
    -B folder
        - b.zip
            -b.rar
    -C folder
        ....    
            ...
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个,但没有用

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

)
Run Code Online (Sandbox Code Playgroud)

我使用 Windows 并安装了 7-Zip。

附加问题:是否可以将所有从最后一个子文件(a.rar、b.rar)中提取的文件保存在同一个文件夹(主文件夹)中?

Ste*_*ngs 12

剧本:

for /F %%I IN ('dir /b /s *.zip *.rar') DO (
    "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)
Run Code Online (Sandbox Code Playgroud)

解释:

for /F %%I IN ('dir /b /s *.zip *.rar') DO (
Run Code Online (Sandbox Code Playgroud)

这对命令返回的每个文件执行一个循环dir /b /s *.zip *.rar。该/s告诉dir递归到子目录和/b裸露的格式打印。

文件名存储在%%I变量中供以后使用。如果您在提示符下键入此内容,则可以%I改用。

"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
Run Code Online (Sandbox Code Playgroud)

这将执行提取。该参数-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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果目录或文件名中有空格或制表符,这将不起作用。要使用它们,您需要指定选项“delims=”以将它们作为标记分隔符删除。 (2认同)