7z命令行參數中的路徑

最近在自動化的過程當中用到了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文件中列出的文件和目錄不會添加的壓縮包中。

注意:排除列表中只能使用相對目錄。

相關文章
相關標籤/搜索