7z命令行参数中的路径

Posted sparkdev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7z命令行参数中的路径相关的知识,希望对你有一定的参考价值。

最近在自动化的过程中用到了7z命令行工具,发现其参数中的路径挺有意思的,在此总结一下。本文中所有demo使用的7z版本为:15.14 x64。

压缩某个文件夹

下面的命令会把g:\\temp\\目录和目录下的所有文件打包到压缩文件abc.zip中。

7z.exe a abc.zip g:\\temp\\

注意,此时压缩包中是包含temp目录的。

当我们解压缩abc.zip文件时就会发生一件比较有趣的事。无论通过右键菜单中windows提供的”Extract All…”还是7z提供的”Extract files…”,默认都会给解压缩的文件添加一级目录即abc。

多出的这级目录可能是我们想要的,可能不是。如果不是,我们可以在上面的UI界面中把它去掉。

或者你可以使用命令行解压它:

7z.exe x abc.zip –og:\\

你能相信吗,解压出来的文件路径中并没有abc这级目录!

压缩某个文件夹下的所有文件

由于通过UI解压缩时默认会生成一级以压缩文件名命名的目录,为了在解压后不改变目录树的结构。我们可以考虑在压缩时,只添加根目录下的所有文件而不添加根目录,然后以根目录的名称命名压缩文件。

7z.exe a g:\\temp.zip g:\\temp\\*

此时,压缩包中将不包含temp目录。

这样,我们通过UI默认解压出来的文件路径和压缩前是一致的。

但是,如果使用命令行解压就得手动添加上一级目录:

7z.exe x g:\\temp.zip –og:\\temp

接下来让人意想不到的事情再次发生了,当我们使用相对目录执行压缩命令时:

G:\\> 7z.exe a g:\\temp.zip temp\\*

压缩包中仍然出现了temp目录。查询7z的文档后才知道,在这种情况下,要使用相对路径,需要这样写:

G:\\> 7z.exe a g:\\temp.zip .\\temp\\*

在压缩包中包含压缩目录的父目录

还有一种情况,就是我们在压缩一个目录时,希望把它的父目录信息也保存到压缩包里。注意,压缩包里只有父目录而不包含父目录中的其他文件。这时就必须使用相对目录了:

G:\\>7z.exe a g:\\temp.zip temp\\test\\

这样,压缩包中文件的根目录就是temp了。

文件列表

当执行压缩命令时,除了指定目录外还可以指定一个或者多个文件。如果要指定多个文件/目录,最好的方法是把这些文件/目录的名称写到一个文本文件中,然后把这个文本文件作为命令行参数。这个文本文件就称为文件列表,在参数中引用它时需要在文件名前面添加一个特殊的符号’@’。

G:\\>7z.exe a g:\\abc.zip –i@g:\\list.txt 

-i表示list.txt中罗列的文件和目录会被添加到压缩包中。

文件列表中可以写文件的绝对路径,也可以写相对路径。需要注意的是,如果写相对路径,是相对于当前工作目录的路径,而不是相对于list.txt的路径。

文件列表中既可以罗列单个文件的路径,也可以罗列目录的路径。注意区分相对路径和绝对路径,其规则和前文所述相同。

 

除了包含指定的目录/文件,还可以排除指定的目录/文件。

G:\\>7z.exe a g:\\temp.zip g:\\temp\\ -x@g:\\temp\\list.txt

-x表示list.txt文件中列出的文件和目录不会添加的压缩包中。

注意:排除列表中只能使用相对目录。

 

以上是关于7z命令行参数中的路径的主要内容,如果未能解决你的问题,请参考以下文章

7Z命令行怎么用?

命令行压缩工具7z.exe使用详解

7Z的命令行怎么操作

仅使用 7z 压缩文件而不保留路径

怎么用DOS命令解压7z文件

7z命令行问题