자주 사용하는 응용 프로그램을 시작하기위한 Powershell 바로 가기


0

매일 사용하는 앱이 여럿 있습니다. 이들은 '설치'되지 않았지만 파일 시스템의 어딘가에있는 응용 프로그램입니다. 그 중 하나를 시작하면 다음과 같은 내용이 포함됩니다.

e:
cd \PortableApps\FileZillaPortable
FileZillaPortable.exe

(아니, 모두가 'portableapps'가 아니므로 휴대용 앱 런처를 사용하여 문제가 해결되지는 않지만 PortableApps 폴더에 저장하는 경향이 있습니다.) 나는 이것들에 접근하는 더 빠른 길을 만들고 싶다. 나는 경로의 어딘가에 배치 파일의 톤을 넣을 수 있지만 .. 무슨 엉망!

필자는 PowerShell 창을 지속적으로 사용하고 있으므로 내 응용 프로그램을 시작하는 지름길을 갖는 것이 좋을 것이라고 생각했습니다.

어떻게 이러한 모든 응용 프로그램에서 작동하는 하나의 멋진 바로 가기를 만들 수 있습니까?

답변:


1

내 프로필에 다음 스크립트를 추가했습니다. 이제 powershell 프롬프트에서해야 할 일은 type입니다. p (space) (ctrl-space) 응용 프로그램 이름을 입력하기 시작하십시오. 또는 입력 할 수 있습니다. p -AppName. 스페이스 바를 누르면 완성자가 나타납니다. 완전한 이름을 입력 할 필요가 없습니다. 그만큼 p 스크립트는 귀하의 가치와 이름이 일치하는 첫 번째 앱을 엽니 다.

Example of completer

(덧붙여서, 저는 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.


0

DOS 3.2로 돌아가서 배치 파일을 만들어 바로 가기를 만들었습니다. 나는 그 폴더 전체를 가지고 있었고 그 다음에 PATH 변수에 그 폴더를 넣어서 어디서나 명령어를 실행할 수있게했다.

리눅스에서 사람들은 종종 자신의 바이너리를 모두 /usr/bin 폴더에 넣고 PATH 변수에 넣으십시오. Windows에서 이에 해당하는 기능은 다음과 같습니다.

% userprofile % \ bin \

PATH에 넣으십시오. 그런 다음 모든 바이너리를 거기에 버리십시오. (나는 그것이 더러워 보인다는 것을 알고있다. 그러나 그것은 매우 쉬울 것이다)


나도 그 접근법을 사용했다. 한 폴더에 모든 EXE 파일을 갖는 것은 대부분의 최신 응용 프로그램에서는 실용적이지 않습니다. 하나의 폴더에 BAT / CMD 파일이있는 경우 ( path )는 작동하지만 프로그램을 추가 할 때마다 다른 배치 파일을 만들어야합니다. 물론 내 방법도 마찬가지이므로 appshortcuts.txt 파일을 한 번씩 다시 작성하는 것이 좋습니다. 또는 지정된 경로에서 새 파일이 감지 될 때 작업을 다시 빌드하도록 예약하십시오. 나는 내가 후자를 더할 것이라고 생각한다.
Rob M

'내 방법대로'라는 말은 프로그램을 추가 할 때마다 여분의 것을해야한다는 뜻입니다. 제 경우에는 appshortcuts.txt 파일을 삭제하고 다시 만들어야합니다.
Rob M

동의한다. 개별 파일의 이점은 명령 이름의 유연성입니다. "p & lt; command & gt;"대신 " 때때로 "p netscan"대신 "scan"과 같이 입력 할 수있는 사용자 정의 이름을 갖고 싶을 때가 있습니다. 배치 파일을 만드는 데 너무 많은 오버 헤드가 있습니다. 그래서 더 이상하지 않습니다. 나는 그날 앱 런처였던 TUI 쉘 프로그램을 기억한다.
HackSlash

appshortcuts.txt 파일의 '별칭'을 원하는대로 편집 할 수 있습니다. 각 줄에는 자동 완성에 나타나는 이름이 포함되어 있습니다. tab ) 실행 파일의 채우기 경로.
Rob M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.