Windows 7-Zip为匹配*的文件夹关闭递归*
我使用的是7-Zip 19.00 64位。我想压缩文件夹中的文件,但不包括子目录;禁用递归 我正在执行的命令:Windows 7-Zip为匹配*的文件夹关闭递归*,windows,batch-file,7zip,Windows,Batch File,7zip,我使用的是7-Zip 19.00 64位。我想压缩文件夹中的文件,但不包括子目录;禁用递归 我正在执行的命令: 7z u -mx9 -r- -bd wwwroot.7z C:\inetpub\wwwroot\*.* C:\inetpub\wwwroot\将在其中包含以域命名的子目录 C:\inetpub\wwwroot\domain.com (directory) C:\inetpub\wwwroot\domain.org (directory) C:\inetpub\wwwroot\doma
7z u -mx9 -r- -bd wwwroot.7z C:\inetpub\wwwroot\*.*
C:\inetpub\wwwroot\将在其中包含以域命名的子目录
C:\inetpub\wwwroot\domain.com (directory)
C:\inetpub\wwwroot\domain.org (directory)
C:\inetpub\wwwroot\domain.net (directory)
C:\inetpub\wwwroot\images (directory)
C:\inetpub\wwwroot\javascript (directory)
C:\inetpub\wwwroot\index.html
C:\inetpub\wwwroot\robots.txt
C:\inetpub\wwwroot\favicon.ico
7-Zip包含与通配符匹配的子目录;domain.com、domain.org、domain.net将位于wwwroot.7z中。图像和javascript将被排除在外。index.html、robots.txt和favicon.ico将如预期的那样位于wwwroot.7z中
因为站点/域的文件夹会随着时间的推移而改变,所以我无法硬编码要排除的文件夹列表
我尝试过使用以下方法,但没有一种方法能达到我的目的:
7z u -mx9 -r- -bd wwwroot.7z C:\inetpub\wwwroot\.
7z u -mx9 -r- -bd wwwroot.7z C:\inetpub\wwwroot\
我在文档中查找了按属性排除的方法,但没有找到。我看过-x选项,但它似乎只适用于文件
我运行此操作的系统是Windows Server 2012 R2
@Mofi:wwwroot.7z应该只包含文件,而不包含子目录
要使用WinRAR完成此任务,我将使用以下命令:
rar u -ma5 -m5 -ep1 C:\inetpub\wwwroot\wwwroot.rar C:\inetpub\wwwroot\*.*
可以使用dir
的输出创建一个列表文件,它可以给出一个文件列表pushd
进入目标目录并运行7z
。%cd%
将保持不变,因为未使用延迟扩展,即与一起使用!cd代码>。如果要使用脚本目录而不是当前目录,请使用%~dp0
更改%cd%
列表文件可以为您提供所需的灵活性 仅将指定目录中的文件以非递归方式压缩到7-Zip存档中的解决方案是:
7z.exe u -mx9 -bd -x!*\ -- wwwroot.7z C:\inetpub\wwwroot\*
开关-x*\代码>导致排除目录C:\inetpub\wwwroot
中的所有目录以及这些目录中的所有文件。7-Zip甚至不尝试使用此开关访问上的一个子目录,因为它可以通过Sysinternals(Microsoft)免费工具看到
使用通配符*
代替*.
将没有文件扩展名的文件压缩到存档文件中。7-Zip帮助页命令行语法解释了*
和*.
与解释*.*.
的Windows的区别,Windows总是像*
一样解释*.
。WinRAR对*.
的解释也不同于*
,如7-Zip,因此与Windows相比也不同
注意:我不明白为什么默认开关-r-
即使在命令行上显式使用,也不会导致忽略所有子目录中的所有文件,根据使用7-Zip 19.00(x86或x64版本)时的帮助页面上的解释-r(递归子目录)开关-r-
使用*.txt
而不仅仅是*
。因此,如果使用通配符模式*
或*
并使用隐式默认值-r-
,或者在命令行上显式指定此开关,则在子目录中添加文件的行为看起来要么是7-Zip 19.00的错误,要么是设计有意的不良记录行为。该命令由于7z
是一个全名为7z.exe
的可执行文件,因此不需要调用。Windows命令处理器等待批处理文件中的可执行文件运行终止,然后继续批处理文件中的下一个命令(行)。@Mofi,7-Zip安装程序未在%PATH%
中安装7z.exe
。我在%PATH%
中确实有一个7z.cmd
,因此我确实需要使用调用
来完成脚本。我没有从脚本中删除call
,因为我不知道OPs环境。使用call
,7z
与.bat
,.cmd
和.exe
文件一起工作。你对我的环境的陈述是错误的。好吧,你现在删除了关于你(现在已删除)评论的-r0
开关,尽管我不得不承认-x!*\
和(默认)选项-r-
在我看来非常不合逻辑,因为我希望根本不会检测到通配符;但即使是-r-x!*\代码>意外工作。无论如何,我完全同意你的看法,-r-
本身就足以防止递归…@aschipfl是的,你是对的。开关-r
、-r-
和-r0
对使用通配符模式*.
或*
没有影响。开关-x*\代码>就足够了,因为我在写答案之前在测试中发现了这一点。我想写一个7-Zip错误报告,但在这个线程之前,7-Zip的作者回答了这个问题,并提供了使用-x*\代码>。在7-Zip讨论论坛中,还有许多关于递归的类似线程。看来这已经是很多年前的事了。谢谢@Mofi将深入7-zip论坛。这是让它工作的最简单的方法。我确实从命令中删除了“-”,因为它似乎不需要。如果是,请回复此评论并解释原因。@ScottJibben开关--
停止解析开关的参数。在这种情况下不需要它,因为存档文件名wwwroot.7z
不以-
开头,而路径为C:\inetpub\wwwroot\*
的通配符模式也不以-
开头。但是,用-->
标记开关列表的末尾,并按照建议将所有开关指定为-->
和存档文件名,这是绝对正确的,因此我总是在使用7-Zip、WinRAR或RAR的命令行上使用此开关。
7z.exe u -mx9 -bd -x!*\ -- wwwroot.7z C:\inetpub\wwwroot\*