Gru*_*ear 40 zip total-commander archiving 7-zip packer
这是 Total Commander 的内部压缩包:

但是我想使用我的 7zip 打包程序。当我选择 5 个文件时,我会为每个选定的文件获得 5 个单独的 .zip 档案。我如何在 7zip 中做到这一点?
Goy*_*uix 69
我不确定您是否可以使用图形用户界面执行您建议的操作,但您当然可以从命令行:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Run Code Online (Sandbox Code Playgroud)
您需要先将目录(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"
Run Code Online (Sandbox Code Playgroud)
这是因为一些看起来像魔术的东西:
/F 告诉 FOR 迭代 () 中的扩展值usebackq 告诉 FOR 我将传递一个命令并使用输出进行迭代delims=?告诉 FOR 我想将令牌分开?- 文件名和目录中的非法字符。我只想要一个令牌。/B中DIR是裸露的格式-只是名字/A:D在DIR是限制通过属性的效果,d是目录如果要将其封装在批处理文件中,您需要进行的唯一更改是对 %i 变量进行双重转义:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Run Code Online (Sandbox Code Playgroud)
jft*_*uga 19
我喜欢 Goyuix 的回答。但是,如果您使用的是 Windows 7(或安装了 Power Shell)并且还使用 7-zip 的命令行版本 7za.exe,那么您可以运行以下命令:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Run Code Online (Sandbox Code Playgroud)
您还可以将“dir”更改为“dir *.exe”以仅选择可执行文件。
Power Shell 的一个好处是您可以使用对象而不是字符串。因此,如果您愿意,您可以非常具体。例如:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Run Code Online (Sandbox Code Playgroud)
这将只包括以下文件:
编辑 如果您想要 zip 文件而不是 7-zip 文件,请改用InfoZip 的 zip.exe。