【问题标题】:How to open image.png using ps1 script?如何使用 ps1 脚本打开 image.png?
【发布时间】:2018-02-19 19:23:19
【问题描述】:

将下面的$usbDriveLetter 变量设置为自动查找 USB 驱动器号,并使用该变量打开 USB 上的图像不起作用。它在 cmd 中按字面意思打印“G:\image.png”。

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

但如果我不使用 var 并在 PowerShell 脚本中将“G:\”设为静态,则图像会正常打开。

G:\image.png

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

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

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

    使用Invoke-Item执行路径:

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

    您也可以使用呼叫接线员&

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

    【讨论】:

      【解决方案2】:

      Frode F.'s helpful answer 提供了有效的解决方案。

      至于什么时候你需要&,PowerShell的调用操作符

      要执行命令/打开指定为未引用的文字字符串的文档,您需要& .

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

      • 任一:作为引用的字符串(例如,"G:\image.png"

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

      注意:

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

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


      至于为什么你需要&

      PowerShell 有两种基本解析模式

      • argument模式,其工作方式类似于传统的shell

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

      运行Get-help about_Parsing 提供了对这些模式的介绍。

      简而言之,第一个令牌决定应用哪种模式,并且为了执行/打开某事,必须在argument模式下解析(在expression模式下,结果只是output);因此,第一个令牌必须是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        • 1970-01-01
        • 2011-10-12
        • 1970-01-01
        相关资源
        最近更新 更多