关于7zip:7zip-Powershell排除具有变量的文件/文件夹

7zip - powershell exclude files/folders with variable

我正在尝试压缩文件夹,但使用powershell排除多个目录。

我得到了以下内容:

1
2
3
4
5
6
7
8
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
2
3
4
5
6
7
8
9
10
11
12
13
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

我们创建了一组参数以传递到7zip中,包括排除的文件夹。在添加排除的文件夹时,我们在文件夹名称前添加-xr!标志,并将其package在双qoutes中。

#debug行将结果命令行输出到控制台

我通过使用7zip可执行文件创建一个字符串,然后在该字符串路径前加一个&符来调用7zip,与您稍有不同。

此方法可以从最终归档中排除多个文件夹,包括folder\\subfolder结构。


两件事:

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