我编写了一个脚本,通过使用7-Zip压缩它们来备份一堆文件。问题是某些文件包含“&”和“'”(单引号)。我尝试将这些(在下面的变量中)替换为“`”或“``”,但这也不起作用。我想我不确定当与Invoke-Expression一起使用时,转义的字符是如何工作的。
以下是代码行:
$exec = "& 'C:\Program Files\7-Zip\7z.exe' u -mx5 -tzip -r '$DestFileZip' '$DestFile'"
Invoke-Expression $exec
答案 0 :(得分:3)
This thread提及:
$exec = @'
& "C:\Program Files\7-Zip\7z.exe" u -mx5 -tzip -r "$DestFileZip" "$DestFile"
'@
Invoke-Expression $exec
使用
@" "@
分隔符,变量和子表达式将被扩展,但引号和其他特殊字符将被视为文字。
答案 1 :(得分:1)
如果您放弃Invoke-Expression并直接执行7z,它是否有效:
& 'C:\Program Files\7-Zip\7z.exe' u -mx5 -tzip -r -ppeople123 $DestFileZip $DestFile
虽然给你用文件更新zip,但我不确定你为什么使用-r
- 除非$ DestFile真的是一个目录?无论如何,7z 9.20这对我有用 - 没有错误:
C:\> $destZip = "foo&bar's.zip"
C:\> $destFile = "foo&bar's.txt"
C:\> & 'C:\Program Files\7-Zip\7z.exe' u -mx5 -tzip -ppeople123 $destZip $destFile
7-Zip [64] 9.20 Copyright (c) 1999-2010 Igo Pavlov 2010-11-18
Scanning
Creating archive foo&bar's.zip
Compressing foo&bar's.txt
Everything is OK