转义PowerShell的Invoke-Expression变量中的字符

时间:2012-09-17 23:03:53

标签: powershell

我编写了一个脚本,通过使用7-Zip压缩它们来备份一堆文件。问题是某些文件包含“&”和“'”(单引号)。我尝试将这些(在下面的变量中)替换为“`”或“``”,但这也不起作用。我想我不确定当与Invoke-Expression一起使用时,转义的字符是如何工作的。

以下是代码行:

$exec = "& 'C:\Program Files\7-Zip\7z.exe' u -mx5 -tzip -r  '$DestFileZip' '$DestFile'"

Invoke-Expression $exec

2 个答案:

答案 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