Zip 命令行问题

Zip 命令行问题

我有一台 Windows 计算机,其目录结构包含具有特定扩展名的文件。我需要一个脚本,该脚本将为每个具有该扩展名的文件添加一个压缩文件。有没有办法使用 7 Zip (7za.exe) 来做到这一点?如果没有,还有其他选择吗?

之前 \dir1\dir2\ file.ext

\dir1\dir2\ file.ext file.zip 之后

答案1

我建议使用 PowerShell。

Get-ChildItem -Include *.ext -Recurse
    | %{ &zipcommand a $_.FullName ($_.FullName+'.zip') }

假设“zipcommand”是您的命令行 zip 工具,并且它接受 3 个参数,“a”表示存档、要存档的文件和存档名称。

答案2

可能不是您要找的,但我会使用 Cygwin 和 *nix 查找实用程序:

find dir1 -name "*.ext" | while read i; do zip "$i.zip" "$i"; done

“find”从“dir1”开始递归,匹配所有名称形式为“*.ext”的文件。它输出匹配列表,通过管道传输到“while read i”,后者将每行(匹配路径)读入变量“i”。对于每个不同的 i 值,都会执行“zip”命令,将文件压缩为同名(和路径)的 zip 存档,但附加“.zip”。

请注意,上述操作不会删除原始文件。我可以在 zip 命令后添加“rm $i”来执行此操作,但最好一步创建存档,然后使用:

find dir1 -name "*.ext" | while read i; rm "$i"; done

查找并删除原始文件。在运行命令之前测试命令的另一个好方法是回显命令,而不是执行命令。

find dir1 -name "*.ext" | while read i; do echo zip "$i.zip" "$i"; echo rm "$i"; done

这将向您显示删除 echo 后它将执行的每个 zip 和 rm 命令,以便您可以确保它执行的操作正确。然后删除 echo 以实际执行。

如果有使用常见 Windows 实用程序来实现此目的的好方法,我还不知道。

答案3

您可以将 VBScript 与合适的命令行 zip 程序一起使用。在 Google 上搜索 VBScript + FileSystemObject + Recursive 以找到合适的 vbscript 脚本。您可以修改代码以执行命令行 zip 工具。

答案4

以下是一个例子基因,它内置有 zip 功能:

cd "c:\dir1\dir2"
pwd
string_t file, dir_listing=`ls ./`;
string_t zipfile;
foreach(file; dir_listing) {
    zipfile = strtok(file, "."); 
    zip $zipfile $file
    }
ls -l

我在 Windows 系统上编写了它,它应该可以正常工作。至少在这里是这样的。如果你想尝试一下,你可以下载 Ch 的标准版本,它是免费软件。只需将代码粘贴到文本文件中并将其命名为任何.ch. 安装 Ch 后,您可以从命令行运行它。

编辑:上面的脚本将压缩全部指定目录中的文件。要按扩展名过滤文件,请更改

string_t file, dir_listing=`ls ./`;

string_t file, dir_listing=`ls *.ext`;

您只是将 ls 命令的参数更改为适合您的文件类型。

相关内容