如何提取此文件夹的子目录中的所有存档?


18

如何提取文件夹中子目录中包含的多个存档,然后将结果输出回存档所在的文件夹中。

Answers:


22

首先,安装7-zip

bat在目录的根目录中创建一个文件,其中包含许多子目录,其中包含归档文件。然后将以下内容粘贴到:

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
)

启动蝙蝠,所有rar / zip文件都将解压缩到它们所在的文件夹中。

这是如何运作的?

FOR(D / r %% F in(“ *”)DO(

For循环遍历当前目录中的所有文件夹,并将路径放入变量中%%F

推送%CD%

将当前目录放入内存。

cd %% F

将变量中的文件夹设置%%F为当前目录。

FOR %%X in (*.rar *.zip) DO (

对于当前文件夹中的rarzip文件,请执行以下操作:

"C:\Program Files\7-zip\7z.exe" x "%%X"

在文件上运行7-zip。%%X因为某些文件名中包含空格,所以需要使用引号引起来。

popd

返回到我们之前存储在内存中的上一个目录。

希望这对某人有用。


3

我在从Windows Vista运行脚本时遇到问题。当我运行代码时,什么都没有发生。我需要成为管理员才能运行脚本。当我右键单击.bat文件并“以管理员身份运行”时,它不起作用,因为它出于某种原因在system32文件夹中启动(如果我没记错的话)。要解决此问题,只需使用Windows环境变量(在此说明:Windows环境变量)%〜dp0切换回运行脚本的目录。

@echo on
cd %~dp0

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
)

确保没有* .rar或* .zip文件与脚本位于同一级别。他们应该下降一级。

我希望此评论对某人有所帮助。


这对我来说很好。我不得不改变路径“C:\ Program Files文件(x86)的”从“C:\ Program Files文件”,因为我在运行64位赢得7
升贴水

1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

在当前目录中开始递归搜索,找到所有以.zip结尾的文件,然后将其通过管道传递到循环中。对于找到的每个文件,它将在文件上运行一个解压缩命令,并将输出转移到文件目录中。


1

但是,如果您正在运行Windows 64-bit7-Zip 32-bit,则上述答案可以正常工作,正确的路径适用C:\Program Files (x86)\7-Zip于7-Zip。以下是对我有用的脚本。

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files (x86)\7-zip\7z.exe" x %%X
    )
    popd
)

但是,如果您具有7zip的64位版本,则正确的路径是:如原始答案中所述,为“ C:\ Program Files \ 7-zip \ 7z.exe”。
罗恩·亚当斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.