Eu adicionei o seguinte script ao meu perfil. Agora tudo o que preciso fazer em um prompt do powershell é digitar p
(space)
(ctrl-space)
e começar a digitar o nome do aplicativo. Ou eu posso digitar p -AppName
. (o completer aparece depois de pressionar a barra de espaço) Note que você não precisa digitar o nome completo; O script p
abrirá o primeiro aplicativo cujo nome corresponda ao seu valor.
(Aliás,useioLICECapparafazeroGIFanimado.)
Esteémeuprimeiropassonisso.Qualquersugestãodemelhoriaseriaapreciada.
Paraseuuso,vocêsóprecisaráadicionarseuscaminhosaoarrayapproots.
$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)}
}
A essência deste código é criar um arquivo de texto que contenha uma lista de nomes de aplicativos e seus caminhos completos. (delimitado por tabulações) Em seguida, a função p
permite procurar aplicativos cujo nome comece com o parâmetro AppName
. Em seguida, usamos Register-ArgumentCompleter
para adicionar todos os nomes de aplicativos à lista de valores possíveis para AppName
.