【问题标题】:Pass the full path to the powershell script where it was called from the right-click context menu.将完整路径传递到从右键单击上下文菜单中调用它的 powershell 脚本。
【发布时间】:2014-03-08 01:45:33
【问题描述】:

执行某些活动的 Powershell 脚本放置在右键单击上下文菜单中,并且可以从文件系统上的任何位置调用。

问:如何传递包含用户单击启动脚本的上下文菜单的完整路径的参数?

"C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe" 
-File "D:\Run-CoolScript.ps1" .......

以上是注册表中用于指定上下文菜单操作的命令。我应该放什么而不是点,以便脚本知道它是从哪里启动的?

非常感谢

【问题讨论】:

    标签: windows powershell arguments registry contextmenu


    【解决方案1】:

    我过去用过这样的东西:

    ... -Command `"& {[Environment]::CurrentDirectory=(Set-Location -LiteralPath:'%L' -PassThru).ProviderPath; D:\Run-CoolScript.ps1}`"
    

    或者,如果您没有对依赖于当前目录正确设置的 .NET 进行任何调用,您可以简化为:

    ... -Command `"& {Set-Location -LiteralPath:'%L'; D:\Run-CoolScript.ps1}`"
    

    【讨论】:

    • 您是否在从注册表中运行时对此进行了测试,想知道 %L 变量是否报告了右键单击的当前目录,或者 Powershell.exe 的目录,即 `C:\Windows\ System32\WindowsPowershell\v1.0`
    • 它将报告完整路径 IIRC。如果项目是文件,那么它就是文件的完整路径。所以你需要先做分割路径,例如Set-Location -LiteralPath (Split-Path '%L' -Parent);...。顺便说一句,第一个示例来自 PSCX 的 Enable-PowerShellPromptHere 命令,该命令为文件夹添加了“打开 Powershell”上下文菜单条目。
    【解决方案2】:

    解决方案:包含当前位置的变量,通过右键单击空白空间 i %V 来调用上下文菜单。

    所以注册表命令条目变成了:

    "C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe" 
    -File "D:\Run-CoolScript.ps1" "%V"
    

    注意当然D:\Run-CoolScript.ps1有“知道”如何处理输入参数!

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2010-12-15
      相关资源
      最近更新 更多