2012-05-07 6 views
2

Powershellで7za コマンドラインユーティリティを使用してファイルを解凍しようとすると、小さな問題があります。他のプログラムを呼び出すときのPowershell変数の展開

$zip_source変数をzipファイルのパスに設定し、 $unzip_destinationを目的の出力フォルダに設定しました。原因空白があってはいけませんという事実に

& '7za' x -y "$zip_source" -o$unzip_destination 

7za x -y <zip_file> -o<output_directory> 

だから私の現在の呼び出しは次のようになります。7zaのコマンドラインの使用法は次のように指定した引数を必要とするしかし

-oとその宛先 の間では、$unzip_destination変数をPowerShellが展開しないと思われますが、$zip_sourceは展開されています。

現在のところ、プログラムは、のルートに の$unzip_destinationという名前のすべてのファイルを単純に抽出します。変数の前後に引用符の種類を設定 はどちらも動作しません。

-o"$unzip_destination" : still extracts to C:\$unzip_destination 
-o'$unzip_destination' : still extracts to C:\$unzip_destination 
-o $unzip_destination : Error: Incorrect command line 

は、コマンドを実行する前に、拡張を強制する方法はありますか?

答えて

2

このようにしてみてください:

-o$($unzip_destination) 
+0

私が去るときに-oとunzip_destination –

+0

の間にスペースは入れません-oの後のスペースを外に出す - ありがとう。 '$()'はPowerShellで何らかのサブシェルを起動しますか(私はUnixのバックグラウンドからWindowsスクリプティングに慣れていません)。 – BergmannF

+2

$()は部分式と呼ばれ、親の中のすべてが1つの値として返されます。$( "Hello、" + "world!")は文字通り:Hello、world! これらは、ある式の出力を別の文字列の途中で文字列に変換したい場合に便利です。 – SpellingD

4

このお試しください:これは動作するはず

& '7za' x -y "$zip_source" "-o$unzip_destination" 
+0

でもうまくいきます - 私は引用符で実験しておくべきだったと思います。 – BergmannF

0

を:

& '7za' x -y $zip_source -o${unzip_destination}