我正在尝试创建一个 7-Zip 存档,该存档将压缩某个文件夹(仅指定一个!),同时排除某个文件扩展名。我想出了这个:
"PATH-TO-7Z.EXE" a archive.7z "C:\tools\" -t7z -mx=9 -mhe=on -mtc=on -sccUTF-8 -scsUTF-8 -ssc- -ssw -y -slp -r -x!*.avi
但是,它的作用是扫描整个 C 盘,查找工具(C:\tools\
在上面的例子中作为目标给出)作为关键字,并将找到的任何内容添加到我的档案中。
有办法避免这种情况吗?意思是只存档,C:\tools\
同时排除指定的扩展名。
我认为这与选择有关-r
,但我不确定是什么。
答案1
7-Zip 根据当前目录进行搜索。这部分信息没有明确记录,但它在 Add 命令的帮助中有所暗示:
cd /D c:\dir1\ 7z a c:\archive3.zip dir2\dir3\
档案 c:\archive3.zip 中的文件名将包含 dir2\dir3\ 前缀,但不包含 c:\dir1\ 前缀。
在启动 7-zip 之前,您需要更改当前目录,因此您的命令如下所示:
pushd "C:\Tools" & C:\Path\To\7z.exe a -r -x!*.avi archive.7z * & popd
如果愿意的话,您还可以将该字符串分成 3 行。
还值得注意的是,您的命令行中有很多不必要的选项:
-ssc-
:Windows 系统上的默认设置-t7z
:仅当无法根据扩展名确定存档类型时才需要(例如,-tzip
如果要创建.xpi
文件则必须指定)-mhe=on
:您需要仔细检查,但我不认为标头加密对未加密的档案有任何作用。-scsUTF-8
: 默认设置-sccUTF-8
:仅当你想读取控制台输出(或重定向到文件)并且你确实需要 UTF-8 来实现该特定目的时才需要-y
:完全不能与 Add 命令一起使用(-e
或者-x
仅适用于 Add 命令)。-ssw
:如果您认为需要此功能,则应考虑在 VSS 快照上进行操作,这样您就可以确保获得正在读取的文件的一致副本。如果此功能用于您已测试其行为的特定应用程序,那么您可以忽略这一点-slp
:请确保您已阅读帮助并了解此选项的要求和效果,并且已对其进行测试以确保它不会对您的环境产生不利影响。
答案2
是的,-r 选项不一定能达到你的预期。现在在常见问题解答:为什么 -r 开关不能按预期工作?:
为什么 -r 开关不能按预期工作?
在大多数情况下,您不需要 -r 开关。即使没有 -r 开关,7-Zip 也可以压缩子文件夹。
示例 1:
7z.exe ac:\a.7z "C:\Program Files" 完全压缩“C:\Program Files”,包括所有子文件夹。
示例 2:
7z.exe a -rc:\a.7z "C:\Program Files" 在 C:\ 的所有子文件夹中搜索并压缩“Program Files”(例如,在“C:\WINDOWS”中)。
如果您只需要压缩具有某些扩展名的文件,则可以使用 -r 开关:7z a -rc:\a.zip c:\dir*.txt 压缩文件夹 c:\dir\ 及其所有子文件夹中的所有 *.txt 文件。