Jul*_*iet 7 windows compression zip 7-zip windows-10
我有一个硬盘驱动器,其中包含许多各种内容备份的 ZIP 文件。它们在不同的时间点以不同且不一致的方式进行压缩,其中很多使用最小压缩设置。
有没有办法(最好使用 7zip)使用相同(最佳)压缩设置重新压缩驱动器上的所有 ZIP?
下面是我过去用于类似任务的脚本,100% 成功,它是7Zip 的纯批处理,您可以在其中明确指定源目录,它可以是驱动器号或文件夹。
这也允许您显式指定初始根临时目录,然后在其中创建一个新文件夹,该文件夹与 zip 文件的名称减去 zip 扩展名相匹配,然后在每个 zip 文件的7Zip存档操作完成后将其删除,For / F循环迭代和处理。
你刚才设置的值Src=,ExtractDir=和z7=变量是什么,他们需要在您的环境在脚本的顶部,其余的将只是工作。
您可以根据需要在切换后立即在命令末尾指定所需的任何7Zip 压缩方法。%z7% a ~-aoa-aoa -m<method_parameters>
但是,要作为批处理脚本运行,请将逻辑保存到桌面上的文本文档等中,就像<something>.cmd从文本文档文件 | 保存选项。保存后,只需双击它以执行逻辑(或右键单击以管理员身份运行),然后确认文件已按预期操作。
@ECHO ON
SET Src=X:\
SET ExtractDir=%Src%\tmpExtract007
SET z7="C:\Program Files\7-Zip\7z.exe"
FOR /F "usebackq tokens=*" %%a IN (`DIR /S /B /A-D "%Src%\*.zip"`) DO (
IF NOT EXIST "%ExtractDir%\%%~Na" MD "%ExtractDir%\%%~Na"
ECHO A | %z7% e "%%~Fa" -o"%ExtractDir%\%%~Na" -r
%z7% a "%%~Fa" "%ExtractDir%\%%~Na\*" -aoa
RD /Q /S "%ExtractDir%\%%~Na"
)
PAUSE
EXIT
Run Code Online (Sandbox Code Playgroud)
请注意命令ECHO A |前面的%z7% e ~告诉它覆盖 out 目录中存在的任何现有文件,而不是等待您告诉它这样做,等等。
另外,请注意命令-aoa末尾的开关的使用,%z7% a ~它告诉它覆盖您正在压缩的 zip 文件中的所有现有文件,以替换其中的所有原始文件,而无需事先实际删除整个原始 zip 文件,这非常简单如果需要,添加到此脚本中的IF EXIST "%%~Fa" DEL /Q /F "%%~Fa".
For /?
Run Code Online (Sandbox Code Playgroud)%~fI - expands %I to a fully qualified path name %~nI - expands %I to a file name only %~xI - expands %I to a file extension only
这是常规命令提示符 ( cmd.exe)的简单脚本,可以为您执行此操作:
set ZIP7="C:\Program Files\7-Zip\7z.exe"
for %z in (*.zip) do (
mkdir tmp
cd tmp
%ZIP7% x ..\%z
%ZIP7% a ..\%z.7z -r -mx9 *
cd ..
rmdir /s /q tmp
)
Run Code Online (Sandbox Code Playgroud)
首先,ZIP7用路径定义变量7z.exe。然后for遍历当前目录中的所有 zip 文件。每个 zip 文件都被提取到tmp目录中,然后使用 7-Zip 使用最大压缩(-mx9选项)重新压缩。
您可以将这些命令放在批处理文件中。在这种情况下,%在for-loop 变量中使用 double 。也就是说,使用%%z代替%z。
| 归档时间: |
|
| 查看次数: |
1011 次 |
| 最近记录: |