2017-02-14 109 views
1

我試圖壓縮一個文件夾,但使用powershell排除多個目錄。7zip - powershell排除變量的文件/文件夾

我有以下幾點:

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe" 

$Source = "D:\Zip\*" 
$Target = "D:\backup.7z" 
$exclude = 'Customer\Images\*' 

sz a -xr!'$Customer\Images\*' $Target $Source 

這工作得很好。但是,當我想改變的-xr!-xr!'$exclude'-xr!$exclude它停止工作由於某種原因。上面分配的變量是否被解析?

+1

變量未在單引號字符串中擴展。 – wOxxOm

+0

它不能在'-xr!$ exclude'中使用.. –

回答

1

嘗試......

if (-not (Test-Path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
$7ZipPath = "$env:ProgramFiles\7-Zip\7z.exe" 

$Source = "D:\Zip\*" 
$Target = "D:\backup.7z" 
$foldersToExclude = 'folder1', 'folder2' 

$7zipParams = @('a',$Target) 
@($foldersToExclude) | ForEach-Object { $7zipParams += "`"-xr!$_`"" } 
$7zipParams += $Source 

Write-Host ($7ZipPath+' '+$7zipParams -join ' ') # debug - show the command line 
&$7ZipPath $7zipParams 

我們創建則params的數組傳遞到7zip的,包括排除的文件夾。由於我們追加排除的文件夾,因此我們在文件夾名稱前加上-xr!標誌,並將它們以雙重qoutes包裝。

#debug線所得到的命令行輸出到控制檯

我打電話7zip的略有不同給你,通過與7zip的可執行創建字符串,則前面加上該呼叫到與符號該字符串的路徑。

此方法可以從最終歸檔中排除多個文件夾,其中包括folder\subfolder結構。

+0

感謝您的擴展版本!我的下一步是使用多個排除文件夾。但是,你似乎在想我。我會將它標記爲awnser –

+0

不客氣。花了幾分鐘才能讓語法正確! – TechSpud

1

兩件事情:

  1. ,如果你希望它可以擴展使用雙引號裏面的變量:sz a "-xr!$exclude" $Target $Source
  2. 使用模式Customer\Images\*排除所有目錄中的文件Images,但包括在一個空目錄生成的文件。如果您不想包含目錄(或其任何文件),請使用Customer\Images
+0

謝謝!這適用於我的情況:) –

相關問題