Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell variable expansion when calling other programs

I have a small problem trying to unzip a file using the 7za command-line utility in Powershell.

I set the $zip_source variable to the zip file's path and the $unzip_destination to the desired output folder.

However the command-line usage of 7za needs arguments specified like this:

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

So my current call looks like this:

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

Due to the fact that there can be no space between -o and the destination it seems that PowerShell will not expand the $unzip_destination variable, whereas $zip_source is expanded.

Currently the program simply extracts all the files into the root of C:\ in a folder named $unzip_destination. Setting different types of quotes around the variable won't work neither:

-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

Is there any way to force an expansion before running the command?

like image 486
BergmannF Avatar asked May 07 '12 14:05

BergmannF


2 Answers

Try this:

& '7za' x -y "$zip_source" "-o$unzip_destination" 
like image 178
jon Z Avatar answered Sep 30 '22 06:09

jon Z


try like this:

-o $($unzip_destination)

Editor's note: This solution only works with a space after -o (in which case just -o $unzip_destination would do) - if you remove it, the command doesn't work as intended.
This approach is therefore not suitable for appending a variable value directly to an option name, as required by the OP.

like image 40
CB. Avatar answered Sep 30 '22 06:09

CB.