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 に答える