Powershell variable expansion when calling other programs

powershell, variable-expansion

Solution

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.

Problem

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?

Original source