2012-09-17 36 views
2

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

下面是代码行:

$ EXEC = “& 'C:\ Program Files文件\ 7-Zip的\ 7z.exe' U -mx5 -tzip -r '$ DestFileZip' '$ DestFile'”

调用,表达$ EXEC如果你抛弃调用表达和直接执行7z格式如

回答

1

它的工作原理:

& '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 
+0

同样的事情发生。它不起作用并且由于单引号而出现错误。 – user1612851

+0

你可以给出一些关于你所看到的错误以及$ destFile值看起来像什么以及一些有问题的路径的细节。 –

2

This thread提到:

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

Invoke-Expression $exec 

Withing的@" "@分隔符,变量和子表达式将得到扩大,但报价等特殊字符被视为文字。