如何在 7zip 中为每个选定的文件/目录创建单独的 zip 文件?

如何在 7zip 中为每个选定的文件/目录创建单独的 zip 文件?

这是 Total Commander 的内部 zip 打包程序:

Total Commander 压缩包对话框的图片。

但是我想使用 7zip 打包器。当我选择 5 个文件时,每个选定文件都会得到 5 个单独的 .zip 档案。如何在 7zip 中做到这一点?

答案1

我不确定您是否可以使用图形用户界面执行您所建议的操作,但您当然可以通过命令行执行此操作:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

您需要先将目录(命令cd)更改为F:\Downloads目录,或者您想要执行批量压缩的任何目录。此外,替换为 *.exe 或您想要过滤的任何扩展名也很容易,只需压缩这些文档即可。

还有秘密解码环:

  • %i是一个变量,用于保存循环中每一步的文件名
  • (*.*)是选择标准,它很容易是 *.exe 或类似的
  • 7z.exe是 7-Zip 的命令行版本
  • %~ni- 这会将 %i 变量扩展为文件名 - 没有扩展名

如果您只想添加给定目录的文件夹,则命令会稍微复杂一些,因为默认情况下 FOR 仅适用于文件。我们需要向它提供一些其他信息:

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

这项技术之所以能成功,是因为一些看似神奇的东西:

  • /F告诉 FOR 迭代 () 中的扩展值
  • usebackq告诉 FOR 我将传递一个命令并使用输出进行迭代
  • delims=?告诉 FOR 我想要将标记拆分为?- 文件名和目录中的非法字符。我只想要一个标记。
  • in/BDIR为了裸格式- 只是名字
  • in/A:D表示DIR按属性限制结果,D 表示目录

如果您想将其封装在批处理文件中,唯一需要做的更改是对 %i 变量进行双重转义:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"

答案2

我喜欢 Goyuix 的回答。但是,如果您使用的是 Windows 7(或安装了 Power Shell),并且还使用 7-zip 的命令行版本 7za.exe,那么您可以运行以下命令:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

您还可以将“dir”更改为“dir *.exe”以仅选择可执行文件。

Power Shell 的一个优点是,你处理的是对象而不是字符串。因此,如果你愿意,你可以获得非常具体的信息。例如:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

这将仅包含以下文件:

  1. 具有 csv 扩展名
  2. 大小小于 18,900 字节
  3. 最后修改于 2011 年 7 月 1 日或之后

编辑 如果你想要 zip 文件而不是 7-zip 文件,请使用InfoZip 的 zip.exe反而。

答案3

我刚刚一直在研究这个问题,我发现的问题之一是档案中的文件夹名称重复,即当压缩名为“foo”的文件夹时,.\foo\fighters.txt会生成一个包含的档案,而不仅仅是一个包含的档案fighters.txt

因此,答案是进入正在处理的目录并让档案出现在前一个(根)目录中,然后返回该目录以处理下一个文件夹。

让 7ZIP 忽略根目录中现有的 ZIP 和 CMD 文件也很重要,以防止它们最终进入存档中,因此需要-x!*.zip排除-x!*.cmd参数。

该脚本还将维护递归文件夹结构。

@echo off

REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal

if exist *.zip goto zip_exist

for /d %%X in (*) do (
    cls
    cd /D %%X
    "e:\Program Files\7-Zip\7z.exe" a -r  -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
    cd ..
)
goto end

:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.

:end
pause

应将上述代码复制到批处理文件(例如“compress_dirs.cmd”)并以管理员身份从包含要压缩的文件夹的目录运行。

希望这可以帮助。

答案4

您可以从以下位置下载并安装 Total Commander 的 7zip 插件http://www.ghisler.com/plugins.htm 执行此操作后,在屏幕截图的窗口右侧会出现另一个 7zip 压缩选项。使用该选项,您可以实现所需的目的。

相关内容