Ярлык Powershell для запуска часто используемых приложений

Вероятно, есть несколько десятков приложений, которые я использую ежедневно. Это приложения, которые не "установлены", но находятся где-то в файловой системе. Запуск любого из них включает в себя что-то вроде этого:

e:
cd \PortableApps\FileZillaPortable
FileZillaPortable.exe

(Нет, не все из них являются "портативными приложениями", поэтому использование средства запуска портативных приложений не решает проблему. Однако я склонен помещать их в папку PortableApps.) Я хотел бы ускорить доступ к этим, Я мог бы положить кучу командных файлов где-нибудь в пути, но.. Какой беспорядок!

Поскольку я постоянно использую окно powershell, я подумал, что было бы неплохо иметь ярлык для запуска моих приложений.

Как я могу сделать один хороший ярлык, который работает для всех таких приложений?

2 ответа

Решение

Я добавил следующий скрипт в свой профиль. Теперь все, что мне нужно сделать в командной строке 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,

Вернувшись в DOS 3.2 дня, я создал командные файлы для создания ярлыков. У меня была целая папка из них, и затем я поместил эту папку в переменную PATH, чтобы я мог запускать их, как команды, из любого места.

В LINUX люди часто сбрасывают все свои двоичные файлы в /usr/bin папку и поместите это в переменную PATH. Эквивалент в Windows будет использовать что-то вроде:

% USERPROFILE%\ Bin\

Поместите это в свой ПУТЬ. Тогда выкинь туда все свои файлы. (Я знаю, это звучит грязно, но это было бы очень легко)

Другие вопросы по тегам