在 PowerShell 中使用带有 -xr 选项的 7za

在 PowerShell 中使用带有 -xr 选项的 7za

我正在使用 PS 脚本通过 7za 压缩文件夹。如果我使用 -xr 选项排除某些文件,压缩将失败并出现警告,其中要压缩的项目等于 0。如果我从 Power Shell(不是脚本)运行,我会遇到同样的问题。

如果我从命令行运行相同的命令,一切都会正常。此外,如果我不使用 -xr 标志,压缩也会起作用。

PS d:\data> e:\backup\7za a -y e:\backup\data.7z * -xr!*.7z

答案1

在 powershell 中 (!) 是一个保留字符,表示非/否定。

PS C:\> $true
True
PS C:\> !$true
False

在 CMD 中(!)没有特殊含义
在 CMD 中我可以运行以下命令并且它可以工作:

7za.exe a -y .\test.7z .\* -xr!*.exe

在 Powershell 中,以下情况会出现错误:

.\7za.exe a -y .\test.7z .\* -xr!*.exe
<extra lines removed>
.exe:  WARNING: The system cannot find the file specified.

在 PS 中,我能够通过用单引号括起来来传递使用 (!) 的参数,从而强制将内容视为文字。

.\7za.exe a -y .\test.7z .\* '-xr!*.exe'

不要尝试将 $var 放在单引号内,它不会扩展。

答案2

尝试:

try{
   & "e:\backup\7za" a -y "e:\backup\data.7z" * -xr!*.7z
}catch{
   Write-Error $_;
}finally{
   Write-Host "check if error and continue";
}

这对我有用。一行:

PS> try{ & "e:\backup\7za" a -y "e:\backup\data.7z" * -xr!*.7z; }catch{  Write-Error $_;  }finally{ Write-Host "check if error and continue";  }

你是丢失的 '&'在您的命令之前。更多信息请见此处:https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx#reCodeBlock,第 5 章。

相关内容