4

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

以下是代码行:

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

Invoke-Expression $exec
4

2 回答 2

4

该线程提到:

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

Invoke-Expression $exec

使用@" "@分隔符,变量和子表达式将被扩展,但引号和其他特殊字符被视为文字。

于 2013-07-29T07:36:46.103 回答
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
于 2012-09-17T23:43:41.283 回答