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

326
Rob M

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

e: cd \PortableApps\FileZillaPortable FileZillaPortable.exe 

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

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

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

0

2 ответа на вопрос

1
Rob M

Я добавил следующий скрипт в свой профиль. Теперь все, что мне нужно сделать в командной строке PowerShell, это набрать p (space) (ctrl-space)и начать вводить имя приложения. Или я могу напечатать p -AppName. (после нажатия клавиши пробела появляется значок «завершить») Обратите внимание, что вам не нужно вводить полное имя; pскрипт открывает первое приложение, имя которого совпадает с вашим значением.

Example of completer

(Кстати, я использовал 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.

0
HackSlash

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

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

% USERPROFILE% \ Bin \

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

Я тоже использовал этот подход. Наличие всех EXE-файлов в одной папке было бы непрактичным для большинства современных приложений. Наличие файлов BAT / CMD в одной папке (в `path`) будет работать, но требует создания другого пакетного файла каждый раз, когда вы добавляете программу. Конечно, так же, как и мой метод, поэтому, может быть, имеет смысл время от времени перестраивать файл appshortcuts.txt. Или запланируйте задание на его восстановление при обнаружении новых файлов по указанным путям. Я думаю, что я добавлю последнее. Rob M 6 лет назад 0
Под «моим методом» я подразумевал, что каждый раз, когда вы добавляете программу, вам нужно что-то делать дополнительно. В моем случае вы должны удалить и восстановить файл appshortcuts.txt. Rob M 6 лет назад 0
Согласен. Преимущество дискретных файлов заключается в гибкости имени команды. вместо "р«иногда вы действительно хотите иметь собственное имя, которое вы можете напечатать, например,« scan »вместо« p netscan ». Слишком много накладных расходов при создании пакетных файлов, поэтому я больше не делаю это. Я помню оболочку TUI программы, которые были просто пусковыми установками приложений, назад в день. HackSlash 6 лет назад 0
Вы можете отредактировать «псевдоним» в файле appshortcuts.txt так, как вам нравится. Каждая строка содержит имя, которое появляется в автозаполнении, и (после одной `tab`) путь заполнения к исполняемому файлу. Rob M 6 лет назад 0