有没有办法使用 7zip 对大量文件夹分别进行压缩?

有没有办法使用 7zip 对大量文件夹分别进行压缩?

如何使用 7zip 通过单个命令分别压缩 260 个文件夹?

最初提出这个问题的人主动删除了帖子。由于这是一项有趣的任务,我重新提出了这个问题并提出了解决方案,并将其作为答案发布在下面。

答案1

这适用于父文件夹中的文件而非子文件夹 http://dropcanvas.com/w7u6a/3

http://dropcanvas.com/w7u6a/3

@echo off
cd /d %~dp0
rem 7z.exe path
set sevenzip=
if "%sevenzip%"=="" if exist "%ProgramFiles(x86)%\7-zip\7z.exe" set sevenzip=%ProgramFiles(x86)%\7-zip\7z.exe
if "%sevenzip%"=="" if exist "%ProgramFiles%\7-zip\7z.exe" set sevenzip=%ProgramFiles%\7-zip\7z.exe
if "%sevenzip%"=="" echo 7-zip not found&pause&exit
set extension=.mp4
for %%a in (*%extension%) do "%sevenzip%" a "%%~na.7z" "%%a"
pause
[/CODE]

答案2

这样写就不会有问题了。

7z a  -t7z "c:\users\user\desktop\folder\%%G.7z" c:\users\user\desktop\folder\%%G -r

答案3

下面是实现该目的的脚本(省略注释“//”,显示注释是为了解释):

@echo off
for /D %%G IN (*) DO (
    //This is my path to 7-Zip, it could be different for you
cd c:\program files\7-zip
    //This is the dir of the parent folder in which you want the subfolders to be zipped individually.
7z a  -t7z c:\users\user\desktop\folder\%%G.7z c:\users\user\desktop\folder\%%G -r )
pause

-t7z 是正在使用的 .7z 档案格式。

要使用脚本:

脚本的编写方式是假设您有一个父文件夹,其中包含要单独压缩的子目录(每个子目录都在其自己的 zip 存档中)。

视觉表现:

----Parent Directory
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)
--------Sub Directory (to be zipped)

Lers 表示您要压缩的子目录位于C:\Users\Foo\Documents。因此它看起来像:

----C:\Users\Foo\Documents
--------Foo1
--------Foo2
--------Foo3
--------Foo4
--------Foo5

因此,在我提供的脚本中,您可以编辑以下行:

7z a  -t7z c:\users\user\desktop\folder\%%G.7z c:\users\user\desktop\folder\%%G -r )

说:

7z a  -t7z c:\Users\Foo\Documents\%%G.7z c:\Users\Foo\Documents\%%G -r )

所以现在我们必须设置 7z.exe 位置以便脚本能够正常运行。

注意:如果成功设置了 7z.exe 的环境变量,则无需执行此操作。如果成功,请省略该行cd c:\program files\7-zip。要测试它是否有效,只需打开cmd.exe并输入7z,如果您获得选项和参数列表,则它有效,如果没有,则继续执行该cd命令。

找到您安装 7-Zip 的位置并复制目录并将其添加到 后面cd。在本例中,它将安装在 中C:\Program Files\7-Zip。因此,完成的脚本将如下所示:

@echo off
for /D %%G IN (*) DO (
cd C:\Program Files\7-Zip
7z a  -t7z c:\Users\Foo\Documents\%%G.7z c:\Users\Foo\Documents\%%G -r )
pause

现在将脚本保存为.bat文件扩展名,如果使用记事本,则必须更改Save as TypeAll Files (".")

如果写得正确,最终结果应该是这样的: 结果

注意:如果您的文件夹包含空格,则不会输出整个名称,而是输出空格前的第一个单词。例如:Foo 1将被存档为Foo.7z(no bueno)。如果多个文件夹的第一个单词为FooFoo 1,情况也是如此,它们都会遇到我解释的最后一个问题,当Foo首次存档时, 的存档Foo 1将尝试覆盖Foo,因为它们具有相同的名称。如果您能找到解决这个问题的方法,那就太好了!

您可能还想尝试 Tyler 版本的我的脚本,当然,他的脚本更“普遍兼容”并且涉及7z.exeEV(环境变量)。

相关内容