【问题标题】:7zip - powershell exclude files/folders with variable7zip - powershell 排除带有变量的文件/文件夹
【发布时间】:2017-02-14 21:17:07
【问题描述】:

我正在尝试压缩一个文件夹,但使用 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 时,它会因某种原因停止工作。上面赋值的变量不被解析吗?

【问题讨论】:

  • 变量不会在单引号字符串中展开。
  • 它在-xr!$exclude 也不起作用..

标签: powershell 7zip


【解决方案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

我们创建一个参数数组以传递到 7zip,包括排除的文件夹。当我们附加排除的文件夹时,我们在文件夹名称前加上 -xr! 标志并将它们包装在双引号中。

#debug 行将生成的命令行输出到控制台

我对 7zip 的调用方式与您略有不同,方法是使用 7zip 可执行文件创建一个字符串,然后在对该字符串路径的调用前加上一个 & 号。

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

【讨论】:

  • 感谢扩展版!我的下一步是使用多个排除文件夹。但看来你让我心烦意乱。我会把它标记为 awnser
  • 不客气。语法正确需要几分钟!
【解决方案2】:

两件事:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2018-07-31
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多