Я использую сценарий PS для сжатия папки с помощью 7za. Если я использую параметр -xr для исключения некоторых файлов, сжатие завершается неудачно с предупреждением, когда элементы для сжатия равны 0. Если я запускаю из Power Shell (не из сценария), у меня возникает та же проблема.
Если я запустил ту же команду из командной строки все работает нормально. Также, если я не использую флаг -xr, сжатие работает.
PS d:\data> e:\backup\7za a -y e:\backup\data.7z * -xr!*.7z
В PowerShell (!) Это зарезервированный символ, обозначающий not / отрицание.
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 в одинарные кавычки, это не будет расширяться.
hoʻāʻo:
try{
& "e:\backup\7za" a -y "e:\backup\data.7z" * -xr!*.7z
}catch{
Write-Error $_;
}finally{
Write-Host "check if error and continue";
}
he hana naʻu. hoʻokahi laina:
PS> try{ & "e:\backup\7za" a -y "e:\backup\data.7z" * -xr!*.7z; }catch{ Write-Error $_; }finally{ Write-Host "check if error and continue"; }
ʻO ʻoe nalowale '&' ma mua o kāu kauoha. Nā ʻike hou aku ma aneʻi: https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx#reCodeBlock , Mokuna 5.