Я добавил следующий скрипт в свой профиль. Теперь все, что мне нужно сделать в командной строке PowerShell, это набрать p
(space)
(ctrl-space)
и начать вводить имя приложения. Или я могу напечатать p -AppName
. (после нажатия клавиши пробела появляется значок «завершить») Обратите внимание, что вам не нужно вводить полное имя; p
скрипт открывает первое приложение, имя которого совпадает с вашим значением.
(Кстати, я использовал LICECap, чтобы сделать анимированный GIF.)
Это мой первый проход в этом. Любые предложения по улучшению будут оценены.
Для вашего использования вам просто нужно добавить ваши пути в массив подходов.
$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
.