将文件名传递到关联的Powershell脚本中

时间:2015-11-18 20:24:22

标签: powershell menu launch

我正在创建一个脚本,以便在用户在Windows资源管理器中双击文件时提供要启动的程序选项。我将选定的文件扩展名与已包装到.exe。

中的脚本相关联

但是在Launcher脚本中,我需要使用用户双击的文件名来创建命令行字符串以启动所选程序。

如何在脚本中获取该文件名?例如“%1”

注意:Windows快捷菜单不合适,因为我也会在网页中使用此脚本。

谢谢!

2 个答案:

答案 0 :(得分:1)

$args变量保存传递给PowerShell脚本的参数。

如果您放置,例如:

Write-Host $args[0]
在脚本中,您将看到脚本调用中传递的第一个参数。

PS > .\myscript.ps1 "test string"

会输出

test string

答案 1 :(得分:1)

答案是@sodawillow和@ user2460798答案的组合。我很感激你们每个人都给了我你的意见。三江源!

  1. 脚本必须定义一个参数来接收路径&双击文件名(注意Param声明必须在任何其他代码之前)“Param([String] $ FileNameSelected)”。
  2. 启动程序时,脚本必须使用param $ FileNameSelected作为参数。
  3. 将您的文件扩展名与您的脚本相关联(包装为 .exe - 我使用PS2EXE)。
  4. 以下是一个示例脚本:

    Param([String]$FileNameSelected)
    
    $title = "Launch Menu"
    $message = "Do you want to launch program A, B, or C?"
    $pA = New-Object System.Management.Automation.Host.ChoiceDescription "&Notepad", "Launches Notepad."
    $pB = New-Object System.Management.Automation.Host.ChoiceDescription "&B", "Launches program B."
    $pC = New-Object System.Management.Automation.Host.ChoiceDescription "&C", "Launches program C."
    $options = [System.Management.Automation.Host.ChoiceDescription[]]($pA, $pB, $pC)
    $result = $host.ui.PromptForChoice($title, $message, $options, 0)
    
    switch ($result)
        {
            0 {
               $wshell = New-Object -ComObject Wscript.Shell
               $executable = 'notepad.exe'
               $argument = '"' + $FileNameSelected + '"'                                
               Start-Process $executable $argument -workingdirectory "c:\windows\system32"
              }
            1 {
               $wshell = New-Object -ComObject Wscript.Shell
               $executable = 'ProgramB.exe'
               $argument = '"' + $FileNameSelected + '"'                                
               Start-Process $executable $argument -workingdirectory "C:\Program Files (x86)\Test"
              }
            2 {
               $wshell = New-Object -ComObject Wscript.Shell
               $executable = 'ProgramC.exe'
               $argument = '"' + $FileNameSelected + '"'                                
               Start-Process $executable $argument -workingdirectory "C:\Program Files\Test"
              }
        }