最近在自动化的过程当中用到了7z命令行工具,发现其参数中的路径挺有意思的,在此总结一下。本文中全部demo使用的7z版本为:15.14 x64。windows
下面的命令会把g:\temp\目录和目录下的全部文件打包到压缩文件abc.zip中。工具
7z.exe a abc.zip g:\temp\
注意,此时压缩包中是包含temp目录的。spa
当咱们解压缩abc.zip文件时就会发生一件比较有趣的事。不管经过右键菜单中windows提供的”Extract All…”仍是7z提供的”Extract files…”,默认都会给解压缩的文件添加一级目录即abc。命令行
多出的这级目录多是咱们想要的,可能不是。若是不是,咱们能够在上面的UI界面中把它去掉。code
或者你可使用命令行解压它:blog
7z.exe x abc.zip –og:\
你能相信吗,解压出来的文件路径中并无abc这级目录!ip
因为经过UI解压缩时默认会生成一级以压缩文件名命名的目录,为了在解压后不改变目录树的结构。咱们能够考虑在压缩时,只添加根目录下的全部文件而不添加根目录,而后以根目录的名称命名压缩文件。文档
7z.exe a g:\temp.zip g:\temp\*
此时,压缩包中将不包含temp目录。自动化
这样,咱们经过UI默认解压出来的文件路径和压缩前是一致的。class
可是,若是使用命令行解压就得手动添加上一级目录:
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文件中列出的文件和目录不会添加的压缩包中。
注意:排除列表中只能使用相对目录。