Zip命令行问题

我有一个Windows机器,其目录结构包含具有特定扩展名的文件。 我需要一个脚本来为每个扩展名为每个文件添加一个压缩文件。 有没有办法做到这一点与7 Zip(7za.exe)? 如果不是,还有其他的select吗?

BEFORE \ dir1 \ dir2 \ file.ext

AFTER \ dir1 \ dir2 \ file.ext file.zip

我build议使用PowerShell。

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

这里假定'zipcommand'是你的命令行压缩工具,它需要3个参数,'a'用于归档,要归档的文件和归档名称。

可能不是你在找什么,但我会使用Cygwin和* nix查找工具:

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

“find”从“dir1”开始recursion,匹配与“* .ext”forms的名称相匹配的所有内容。 它输出一个匹配列表,这个匹配到“while read i”,它把每一行(一个匹配的path)读入variables“i”。 对于i的每个不同的值,执行“zip”命令,将文件压缩成具有相同名称(和path)的zip压缩文件,但是附加了“.zip”。

请注意,以上将不会删除原始文件。 我可以在zip命令后添加“rm $ i”来完成这个任务,但是最好是一步创build归档,然后使用:

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

find并删除原件。 在运行之前testing行的另一件好事是回显命令,而不是执行它。

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

这会告诉你,如果你删除回声,它会做的每个zip和rm命令,所以你可以确保它做的是正确的事情。 然后删除回声实际做到这一点。

如果有一个很好的方式来使用常见的Windows实用程序来做到这一点,我不知道这一点。

你可以使用一个VBScript以及一个体面的命令行压缩程序。 Google for VBScript + FileSystemObject +recursionfind一个合适的vbscript脚本。 你可以修改代码来执行命令行压缩工具。

Ch中有一个例子,它内置了zipfunction:

 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系统上,它应该没有问题。 至less它在这里。 如果你想尝试一下,你可以下载标准版的Ch ,这是免费的。 只需将代码粘贴到文本文件中,并将其命名为.ch。 一旦你安装了Ch,你可以从命令行运行它。

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

 string_t file, dir_listing=`ls ./`; 

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

你只是改变你的文件types的ls命令的参数。