【问题标题】:Recursive Unzipping with 7z.exe使用 7z.exe 递归解压
【发布时间】:2012-02-17 01:51:12
【问题描述】:

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

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

我已在 WinXP cmd.exe 提示符下尝试过此操作,但出现错误:

"a was unexpected at this time."

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

干杯

【问题讨论】:

  • 您是否尝试过使用%%a
  • 这就是答案。现在你最好点击“回答问题”,这样我就可以接受你的答案并给你加分。 :-) 感谢您的帮助。

标签: windows batch-file unzip 7zip


【解决方案1】:

尝试将 %a 更改为 %%a

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

【讨论】:

  • 有人能解释一下 usebackq 是什么意思以及它的来源吗?
  • @Pat:它用于告诉解析引擎使用反引号来识别要处理的命令或文件名。看DIR /s /b *.zip
【解决方案2】:

阅读HELP FOR,然后在命令提示符下尝试以下操作...

FOR /R %a IN (*.zip) DO @ECHO 7z e "%a"

请注意,我们已将 %a 包含在 "

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

@echo off
FOR /R %%a IN (*.zip) DO (
  7z e "%%a"
)

【讨论】:

  • 第二个建议 PA 也很酷,谢谢 - 我需要你使用的双引号。
【解决方案3】:

基于@PA. 的回答(当您确认输出是您想要的结果时,请记住删除@echo),如果您想保留zip 文件中的目录结构,请使用@987654323 @命令而不是e

FOR /R %a IN (*.zip) DO @echo 7z x "%a"

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

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

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

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

有用的资源

批处理文件

在这里,所有内容都浓缩了。以下是适用于当前文件夹中所有 zip 文件的批处理脚本(假设安装了 7zip)。它默认为echoing 哪些命令会运行,并且仅在您传入/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

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多