7zip - powershell排除带变量的文件/文件夹

时间:2017-02-14 11:25:13

标签: 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时,它会因某种原因停止工作。上面指定的变量是否未被解析?

2 个答案:

答案 0 :(得分:2)

试试这个......

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结构。

答案 1 :(得分:1)

两件事:

  1. 如果要扩展,请使用双引号内的变量:sz a "-xr!$exclude" $Target $Source
  2. 使用模式Customer\Images\*会排除目录Images中的所有文件,但在结果文件中包含一个空目录。如果您不想包含目录(或其任何文件),请使用Customer\Images