2012-09-17 37 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的@" "@分隔符,變量和子表達式將得到擴大,但報價等特殊字符被視爲文字。