내 프로필에 다음 스크립트를 추가했습니다. 이제 powershell 프롬프트에서해야 할 일은 type입니다. 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
.
path
)는 작동하지만 프로그램을 추가 할 때마다 다른 배치 파일을 만들어야합니다. 물론 내 방법도 마찬가지이므로 appshortcuts.txt 파일을 한 번씩 다시 작성하는 것이 좋습니다. 또는 지정된 경로에서 새 파일이 감지 될 때 작업을 다시 빌드하도록 예약하십시오. 나는 내가 후자를 더할 것이라고 생각한다.