用于启动常用应用程序的 Powershell 快捷方式

用于启动常用应用程序的 Powershell 快捷方式

我每天使用的应用程序可能有几十个。这些应用程序不是“安装的”,而是驻留在文件系统的某个位置。启动其中任何一个应用程序都需要执行如下操作:

e:
cd \PortableApps\FileZillaPortable
FileZillaPortable.exe

(不,并非所有应用程序都是“便携式应用程序”,因此使用便携式应用程序启动器并不能解决问题。但是,我倾向于将它们放在 PortableApps 文件夹中。)我想找到一种更快捷的方法来访问它们。我可以将大量批处理文件放在路径中的某个位置,但是......真是一团糟!

由于我经常使用 powershell 窗口,所以我认为有一个可以启动我的应用程序的快捷方式会很好。

我如何才能创建一个适用于所有此类应用程序的快捷方式?

答案1

我将以下脚本添加到我的配置文件中。现在,我在 powershell 提示符下需要做的就是键入p (space) (ctrl-space)并开始输入应用程序名称。或者我可以键入p -AppName.(按空格键后会出现完成符)请注意,您不必输入完整的名称;脚本p将打开第一个名称与您的值匹配的应用程序。

完成者的示例

(顺便说一下,我使用 LICECap 制作了动画 GIF。)

这是我第一次尝试。任何改进建议都会受到欢迎。

为了您的使用,您只需将您的路径添加到 approots 数组。

$Global:approots = @(
"E:\PortableApps",
($env:USERPROFILE+"\Downloads")
)
if (-not (Test-Path ($PSScriptRoot+"\AppShortcuts.txt"))) {
    $approots | %{
        $approot = $_
        dir -Recurse ($approot+"\*.exe") | 
        %{ $_.Name.Remove($_.Name.LastIndexOf(".")) + "`t" + $_.FullName } 
    } |
    sort | Out-File -FilePath ($PSScriptRoot+"\AppShortcuts.txt")
}    
function global:p {
    <#
    .SYNOPSIS 
    Launch a portable app.
    .DESCRIPTION
    Launches a portable app whose name starts with the supplied parameter.
    .EXAMPLE
    p filezil
    .PARAMETER PartialFileName
    The beginning of the name of a portable app's EXE file
    #>    
    [CmdletBinding()]
    Param($AppName="start.exe")

    process {
        if (-not (Test-Path ($PSScriptRoot+"\AppShortcuts.txt"))) {
            $approots | %{
                $approot = $_
                dir -Recurse ($approot+"\*.exe") | 
                %{ $_.Name.Remove($_.Name.LastIndexOf(".")) + "`t" + $_.FullName } 
            } |
            sort | Out-File -FilePath ($PSScriptRoot+"\AppShortcuts.txt")
        }    
        gc ($PSScriptRoot+"\AppShortcuts.txt") | ?{ $_.Substring(0,$_.IndexOf("`t")).StartsWith($AppName) }|
        select -first 1 | %{ start ($_.SubString($_.IndexOf("`t")+1)) }
    }
}
Register-ArgumentCompleter -CommandName 'p' -ParameterName 'AppName' -ScriptBlock {
    # learned this from icklicksick on https://www.reddit.com/r/PowerShell/comments/5nqw4m/adding_tabcompletion_to_your_powershell_functions/
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
    gc ($PSScriptRoot+"\AppShortcuts.txt") | %{$val=$_.Substring(0,$_.IndexOf("`t"));[System.Management.Automation.CompletionResult]::new($val, $val, 'ParameterValue', $val)}
}

此代码的要点是创建一个文本文件,其中包含应用程序名称及其完整路径的列表。(制表符分隔)然后该p函数允许您搜索名称以参数开头的应用程序AppName。然后我们使用Register-ArgumentCompleter将所有应用程序名称添加到的可能值列表中AppName

答案2

早在 DOS 3.2 时代,我就制作了批处理文件来创建快捷方式。我有一整个文件夹,里面都是这些文件,然后我将那个文件夹放在我的 PATH 变量中,这样我就可以从任何地方运行它们,就像运行命令一样。

在 LINUX 中,人们经常将所有二进制文件转储到一个/usr/bin文件夹中,并将其放入 PATH 变量中。在 Windows 中,等效操作如下:

%用户配置文件%\bin\

将其放入您的 PATH 中。然后将所有二进制文件转储到其中。(我知道这听起来很乱,但其实非常简单)

相关内容