我正在使用 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 章。