Как задать псевдоним в командной строке Windows?

Вопрос или проблема

Я раньше работал с bash и очень выигрывал от использования псевдонимов. Есть ли эквивалентный способ сделать это в командной строке Windows?

Я не хочу имитировать Linux-среду, поэтому Cygwin не вариант. Мне просто нужен какой-то ярлык для длинной команды, например, cd a_very_long_path.

Как упомянул Christian.K в своем комментарии, команда DOSKEY может использоваться для определения макросов, которые аналогичны псевдонимам.

doskey имяМакроса=определениеМакроса

Параметры макроса ссылаются в определении через позиции с префиксом $: $1 до $9 и $* для всех.

Смотрите документацию технет по doskey, или введите doskey /? или help doskey в командной строке для получения дополнительной информации.

Но у макросов DOSKEY есть серьезные ограничения:

  • Макросы работают только в интерактивной командной строке – они не работают в пакетных скриптах.
  • Их нельзя использовать с обеих сторон конвейера: как someMacro|findstr '^', так и dir|someMacro не работают.
  • Их нельзя использовать в командах FOR /F: for /f %A in ('someMacro') do ... не работает.

Эти ограничения настолько серьезные, что я редко использую макросы DOSKEY.

Очевидно, вы можете создать пакетные скрипты вместо макросов и убедиться, что пути к скриптам находятся в вашем PATH. Но тогда вам нужно будет добавлять префикс CALL перед каждым скриптом, если вы хотите использовать скрипт внутри другого скрипта.

Вы могли бы создать простые переменные “макросы” для длинных и часто используемых команд, но синтаксис немного неудобен для ввода, так как нужно разворачивать “макрос”, когда вы хотите его использовать.

Определение:

set "cdMe=cd a_very_long_path"

Использование (из командной строки или скрипта)

%cdMe%

Вы можете создать пакетный скрипт и сохранить его в вашем пути.

Добавьте %USERPROFILE%\bin в вашу переменную окружения PATH. Затем сохраните ваши скрипты там.

quickcd.cmd

@echo off
cd /d a_very_long_path

Теперь вы можете ввести quickcd в командной строке.

Его можно также вызвать внутри скрипта, используя функцию call

call quickcd

subst

Если вы действительно пытаетесь обойтись чем-то наподобие этого:

C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Вы можете использовать команду subst, чтобы сопоставить этот длинный путь с отдельной буквой диска

subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Затем, когда вы хотите перейти в эту папку, вы можете просто ввести m: в командной строке.

Преимущество этого над doskey в том, что оно работает во всех пакетных программах и отображается в любом диалоговом окне файлов в Windows.

Если вы больше не хотите сопоставление:

subst m: /D

Вы можете использовать тот же трюк, что использует Windows: задайте переменную окружения (или просто переменную в контексте пакета) например, есть переменная окружения %windir% (и некоторые другие) Так вы можете сделать:

cd C:\Windows\

или

cd %windir%

что делает то же самое. Так что все, что вам нужно сделать, это:

set "mydir=C:\very\long\path\to\my\data\"

После этого вы можете сделать (откуда угодно):

dir %mydir%

или

cd %mydir%

или что угодно еще.

Вы можете использовать doskey.exe, вот пример:

doskey qcd=cd [путь]

И теперь, если вы введете qcd, он выполнит cd к этому пути.

Вот некоторая помощь с макросами doskey:

doskey [имяМакроса]=[команда]

Это самая простая форма, вот пример:

doskey word=echo Это действительно, действительно длинное предложение.

И если вы введете word, вывод будет:

Это действительно, действительно длинное предложение.

Вы можете использовать $1-$9 для параметров, вот пример:

doskey npd=notepad $1

И если вы введете npd, он откроет Блокнот, но если мы введем npd test.txt, он откроет test.txt в Блокноте.

Вы можете использовать $* для всех параметров, вот еще один пример:

doskey prt=echo $*

И если вы введете prt Это коротко., то вывод будет:

Это коротко.

Вы можете использовать $T для нескольких команд, вот пример:

doskey newline=echo $1 $T echo $2

И если вы введете newline Привет и, то вывод будет:

Привет

и

Надеюсь, вы поняли.

Я создал “псевдоним” именно для смены директории. В основном, я создал файл с именем fav.bat и поместил его в папку в PATH (например, C:\MyBatches):

@setlocal
@echo off
set userChoice=%1
rem Формат:
rem call :condition SHORTCUT ПАПКА
call :condition web c:\Git\SecThor\SecWeb\App\
call :condition cloud c:\Git\SecThor\SecCloud\dojo.backend\
call :condition good c:\Users\Vitaly\Dropbox\Projects\goodread-friends\
endlocal
popd
GOTO :eof

:condition
rem Делаем PUSHD дважды, так как endlocal делает popd один раз :|
if "%userChoice%"=="%1" pushd %2 & pushd %2 & echo pushd %2
if "%userChoice%"=="" echo %1 =^> %2
GOTO :eof

Теперь я могу быстро переходить в любую предопределенную папку. Я написал целую статью об этой технике здесь.

Это старый вопрос, но он все еще был результатом #2 при поиске этой проблемы в Google, прежде чем я нашел решение, поэтому я поделюсь своим решением.

  1. Создайте папку для ваших скриптов C:\shell-scripts
  2. Добавьте созданную папку в PATH
  3. Внутри этой папки создайте alias.cmd и/или alias.ps1 (в зависимости от того, используете ли вы CMD или PowerShell)
  4. Содержимое файла:
    • pushd "C:\some\path\here"
      
  5. Убедитесь, что вы закрыли и снова открыли терминал, чтобы загрузить PATH
  6. Запустите alias

Обратите внимание, что на моем компьютере я смог создать как файл .cmd, так и файл .ps1 с одним и тем же именем без конфликтов, так что я могу использовать псевдоним как в PowerShell, так и в CMD.

предполагая, что вы остаетесь на одном диске, т.е. не нужно D: и нет необходимости в cd D:\somedir\.

В моем случае C: содержит системные файлы, но вся работа ведется на D:

2 части. сначала установите некоторые рабочие директории, используя пакетный файл.

предположим, это localprofile.cmd. Вы можете иметь несколько таких, просто запускайте их по мере необходимости.

set wd1=D:\home\work\fb440.dumper
set wd2=D:\home\work\py\tests

Теперь используйте другой командный файл для перемещения, основанный на этих переменных окружения, которые вы только что задали.

wd.cmd

echo off
d:
if %1.==. set | findstr wd
if %1==1 cd %wd1%
if %1==2 cd %wd2%
if %1==3 cd %wd3%
if %1==4 cd %wd4%
if %1==5 cd %wd5%
if %1==6 cd %wd6%

И немного примера использования:

D:\home\bin>wd 2

D:\home\bin>echo off
D:\home\work\py\tests>wd 1

D:\home\work\py\tests>echo off

wd сам по себе должен показать мне список закладок директорий. Это работает, но не очень понятно, почему я получаю это сообщение “неожиданный cd”.

D:\home\work\fb440.dumper>wd

D:\home\work\fb440.dumper>echo off
wd1=D:\home\work\fb440.dumper
wd2=D:\home\work\py\tests
cd был неожиданным в это время.

D:\home\work\fb440.dumper> 

Обычные .cmd пакеты

Помимо навигации по директориям, вы можете создать foo.cmd где-то в вашем PATH, который может действовать как псевдоним. Помните, в отличие от оболочек Linux/OSX, файлы cmd могут влиять на переменные окружения и сессию, без необходимости подгружать их.

У меня есть cdbin.cmd для навигации, например:

d:
cd \home\bin

А это псевдо-grep grep.cmd

findstr -n %1 %2

в действии (что бы ни значило sort /+2 /+10)

D:\home\work\fb440.dumper>grep class *.py | sort /+2 /+10

dumper2.py:18:class PrettySafeLoader(yaml.SafeLoader):            
dumper2.py:27:class Comparator(object):                           
dumper2.py:3:class module_settings:                               
linker2.py:5:class module_settings:                               
dumper2.py:65:class DataCompProcessor(object):                    
dumper2.py:69:class DataCompTextRenderer(DataCompProcessor):      
dumper2.py:76:class DataComparator(object):                       

После прочтения всех ответов, я думаю, что ответ – нет.

Ответ или решение

Вопрос о создании псевдонимов (алиасов) в командной строке Windows действительно актуален, особенно для тех, кто ранее использовал bash и привык к удобству, которое они предоставляют. В Windows есть несколько способов реализовать подобные функции, и в этом ответе я постараюсь подробно описать их.

1. Использование команды DOSKEY

Команда DOSKEY позволяет создавать макросы, которые можно считать аналогами алиасов в bash.

Создание макроса:

Для создания макроса используйте следующий синтаксис:

doskey имя_макроса=команда

Пример:

doskey qcd=cd C:\путь\к\вашему\каталогу

После этого, чтобы перейти к указанному каталогу, просто введите qcd.

Ограничения:

Однако у DOSKEY есть ограничения:

  • Макросы работают только в интерактивной командной строке, они не работают в пакетных файлах.
  • Нельзя использовать их в командах с конвейером (|) или в командах FOR /F.

2. Создание пакетных файлов

Другим решением является создание пакетных файлов (.cmd или .bat). Это позволяет создать более сложные команды.

Пример пакетного файла:

Создайте файл quickcd.cmd и сохраните его в директорию, находящуюся в вашем PATH.

@echo off
cd /d C:\путь\к\вашему\каталогу

Теперь вы можете просто ввести quickcd в командной строке, чтобы перейти в этот каталог.

3. Использование SET для создания переменных

Вы также можете использовать команды SET для задания длинных путей в переменных, а затем обращаться к ним.

Пример:

set mydir=C:\ваш\длинный\путь

Теперь можете использовать:

cd %mydir%

Это позволит избежать повторного ввода длинного пути.

4. Использование команды SUBST

Команда SUBST позволяет привязывать длинные пути к буквам дисков, что значительно упрощает навигацию.

Пример использования:

subst X: C:\длинный\путь

Теперь, чтобы перейти в этот каталог, просто введите X:. Чтобы удалить привязку, используйте:

subst X: /D

5. Создание окружений и дополнительных сценариев

Если вам нужно использовать несколько различных каталогов, вы можете создать пакетный файл, который настраивает ваши переменные окружения. Например, создайте файл localprofile.cmd с содержимым:

set wd1=D:\каталог1
set wd2=D:\каталог2

И используйте другой файл для навигации:

echo off
if "%1"=="1" cd %wd1%
if "%1"=="2" cd %wd2%

Заключение

Как вы видите, в Windows есть несколько способов создать функционал, аналогичный алиасам в bash. Наиболее простыми и быстрыми способами являются использование DOSKEY и создание пакетных файлов. Каждый метод имеет свои преимущества, и выбор зависит от ваших предпочтений и требований.

Если у вас есть какие-либо дополнительные вопросы или нужна помощь в реализации, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...