如何使用 7zip 通过单个命令分别压缩 260 个文件夹?
最初提出这个问题的人主动删除了帖子。由于这是一项有趣的任务,我重新提出了这个问题并提出了解决方案,并将其作为答案发布在下面。
答案1
这适用于父文件夹中的文件而非子文件夹 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 Type
为All Files (".")
。
如果写得正确,最终结果应该是这样的:
注意:如果您的文件夹包含空格,则不会输出整个名称,而是输出空格前的第一个单词。例如:Foo 1
将被存档为Foo.7z
(no bueno)。如果多个文件夹的第一个单词为Foo
和Foo 1
,情况也是如此,它们都会遇到我解释的最后一个问题,当Foo
首次存档时, 的存档Foo 1
将尝试覆盖Foo
,因为它们具有相同的名称。如果您能找到解决这个问题的方法,那就太好了!
您可能还想尝试 Tyler 版本的我的脚本,当然,他的脚本更“普遍兼容”并且涉及7z.exe
EV(环境变量)。