使用7z.exe递归解压缩

Spa*_*yNZ 4 windows 7zip batch-file unzip

我偶然发现了以下行,作为在每个子文件夹中提取每个.zip文件的方法.

FOR /F "usebackq" %a in (`DIR /s /b *.zip`) do 7z.exe e %a
Run Code Online (Sandbox Code Playgroud)

我在WinXP cmd.exe提示符下尝试了这个,我收到错误:

"a was unexpected at this time."
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我上面这行是怎么回事.这是7z.exe错误还是批处理脚本语法有问题.我确实将其剪切并粘贴到.bat文件中.

干杯

Mar*_*rco 10

尝试使用%% a更改%a:

FOR /F "usebackq" %%a in (`DIR /s /b *.zip`) do 7z.exe e %%a
Run Code Online (Sandbox Code Playgroud)


PA.*_*PA. 9

阅读HELP FOR然后在命令提示符中尝试以下内容...

FOR /R %a IN (*.zip) DO @ECHO 7z e "%a"
Run Code Online (Sandbox Code Playgroud)

请注意我们已将%a括在"

检查输出的有效性后,删除ECHO.我建议将命令移动到BAT文件中.在这种情况下,将%a更改为%% a

@echo off
FOR /R %%a IN (*.zip) DO (
  7z e "%%a"
)
Run Code Online (Sandbox Code Playgroud)


Pat*_*Pat 7

建立@ PA.的答案(记得@echo在验证输出是你想要的时删除),如果你想保留zip文件中的目录结构,请使用x命令而不是e:

FOR /R %a IN (*.zip) DO @echo 7z x "%a"
Run Code Online (Sandbox Code Playgroud)

如果要将文件解压缩到与其各自的zip文件同名的文件夹中,请使用-o开关和%~n文件名提取符前缀:

FOR /R %a IN (*.zip) DO @echo 7z x "%a" -o"%~na"
Run Code Online (Sandbox Code Playgroud)

最后,如果要执行上述所有操作并覆盖任何现有文件,请使用-aoa开关:

FOR /R %a IN (*.zip) DO @echo 7z x "%a" -o"%~na" -aoa
Run Code Online (Sandbox Code Playgroud)

有用的资源

批处理文件

在这里,它都是浓缩的.以下是适用于当前文件夹中所有zip文件的批处理脚本(假设已安装7zip).它默认为运行echo什么命令,只在你传入时运行(如,是的,请现在解压缩)./y

:: To actually include the path expansion character (tilde), I had to give valid numbers; see http://ss64.com/nt/rem.html for bug reference. Also, try call /? for more info.
@REM The %~n0 extracts the name sans extension to use as output folder. If you need full paths, use "%~dpn0". The -y forces overwriting by saying yes to everything. Or use -aoa to overwrite.
@REM Using `x` instead of `e` maintains dir structure (usually what we want)

@FOR /R %%a IN (*.zip) DO @(
    @if [%1] EQU [/y] (
        @7z x "%%a" -o"%%~dpna" -aoa
    ) else (
        @echo 7z x "%%a" -o"%%~dpna" -aoa
    )
)

@echo USAGE: Use /y to actually do the extraction
Run Code Online (Sandbox Code Playgroud)