如何使用 ps1 脚本打开 image.png?

How to open image.png using ps1 script?

将下面的$usbDriveLetter变量设置为自动查找USB驱动器盘符,并使用该变量打开USB上的图像不起作用。它从字面上打印 "G:\image.png" 在 cmd.

$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name;
"$usbDriveLetter" + "image.png"

但是,如果我不使用 var 并在 PowerShell 脚本中将 "G:\" 设置为静态,则图像可以正常打开。

G:\image.png

那我做错了什么?我们如何使用 ps1 脚本动态打开图像?

当组合两个字符串时,您会得到一个字符串。如果您引用路径 ("G:\image.png"),它将表现相同。

使用Invoke-Item执行路径:

$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name
Invoke-Item -Path ("$usbDriveLetter" + "image.png")

您也可以使用 call-operator &:

$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name
& ("$usbDriveLetter" + "image.png")

提供了有效的解决方案。

至于你需要&,PowerShell的调用运算符

为了执行一个命令/打开一个不是指定为未加引号的文字字符串的文档, 你需要 &.

也就是说,当您指定命令名称(或路径)/文档文件名(或路径)时,需要&

  • 或者:作为 引号字符串(例如,"G:\image.png"

  • 或:作为表达式结果(例如,("$usbDriveLetter" + "image.png");同上 $(...))

注:

  • 打开一个文档(而不是调用可执行文件)的情况下,您可以使用Invoke-Item 而不是 &.

  • 如果您尝试在文件资源管理器中打开文件夹路径,仅 Invoke-Item 有效。


至于为什么需要&:

PowerShell 有两种 基本解析模式:

  • argument mode,其工作方式类似于传统的 shells

  • expression 模式,其工作方式类似于传统的编程语言

运行 Get-help about_Parsing 介绍了这些模式。

简而言之,它是第一个令牌决定应用哪种模式为了execute / open something,必须在argumentmode中解析(在expressionmode ,结果就是 output);因此,第一个标记必须是:

  • 或者:文字,不带引号的 command/document 名称或路径,如前所述。
  • 或:&,在这种情况下,下一个参数 - 然后可以指定为带引号的字符串或表达式 - 被解释为命令/文档名称或执行/打开的路径。