调用其他程序时的Powershell变量扩展

Ber*_*nnF 4 powershell variable-expansion

尝试使用7za Powershell中的命令行实用程序解压缩文件时遇到一个小问题.

我将$zip_source变量设置为zip文件的路径和 $unzip_destination所需的输出文件夹.

但是,7za需要参数的命令行用法指定如下:

7za x -y <zip_file> -o<output_directory>
Run Code Online (Sandbox Code Playgroud)

所以我目前的电话看起来像这样:

& '7za' x -y "$zip_source" -o$unzip_destination
Run Code Online (Sandbox Code Playgroud)

由于-o目标之间不存在空间,因此PowerShell似乎不会扩展$unzip_destination变量,而是$zip_source扩展.

目前,程序只是将所有文件提取到C:\名为的文件夹的根目录中$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
Run Code Online (Sandbox Code Playgroud)

在运行命令之前有没有办法强制扩展?

jon*_*n Z 5

试试这个:

& '7za' x -y "$zip_source" "-o$unzip_destination" 
Run Code Online (Sandbox Code Playgroud)


CB.*_*CB. 3

尝试这样:

-o $($unzip_destination)
Run Code Online (Sandbox Code Playgroud)

编者注:此解决方案仅适用于后面一个空格-o(在这种情况下就-o $unzip_destination可以) - 如果删除它,该命令将无法按预期工作。
因此,这种方法不适合按照 OP 的要求将变量值直接附加到选项名称。

  • $() 称为子表达式,它导致括号内的所有内容都作为一个值返回: $("Hello, " + "world!") 按字面意思返回:Hello, world! 当希望将某个表达式的输出转换为另一个字符串中间的字符串时,这些非常有用。 (3认同)