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


66

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

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


5
Вы бы использовали doskey(не обманывайте себя именем, что это не старый DOS-ключ MS DOS). Используйте doskey /?для получения дополнительной информации. Кроме этого, я боюсь, этот вопрос здесь не по теме.
Christian.K

Возможные дубликаты Есть ли команда для изменения пути из текущего местоположения в каталог по умолчанию, в командной строке Windows? В частности, см. Мой ответ, чтобы узнать, как можно автоматически загружать макросы DOSKey при открытии командной строки.
Каран

связанный + способ сделать доски постоянным superuser.com/questions/49170/…
laggingreflex

Ответы:


61

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

doskey macroName=macroDefinition

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

Обратитесь к документации doskey technet , или введите 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%

Спасибо, тогда есть ли способ работать в пакетном скрипте?
StarPinkER

@JermaineXu - Ни в коем случае с макросами DOSKEY. Смотрите мой обновленный ответ для грубых альтернатив.
Дбенхем

2
Преимущество второго решения в том, что трубопровод будет работать. Первое решение с doskey не будет работать, когда вы захотите использовать макрос в трубопроводе.
Генеральный директор Apartico

? Как я могу поместить эти макросы видимыми в поле Win + R (диалоговое окно «Выполнить»)
ZEE

@ZEE - Ты не можешь. Макросы DOSKEY должны быть физически введены в консольное окно, в котором запущен cmd.exe.
dbenham

15

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

В Linux вы создадите скрипт и добавите его в папку ~/binв Windows, вы можете сделать то же самое.

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

quickcd.cmd

@echo off
cd /d a_very_long_path

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

Он также может быть вызван внутри скрипта с помощью callфункции

call quickcd

Это не работает - установка каталога в пакетном файле влияет только на пакетный файл. Путь возвращается при выходе из пакетного файла.
Тень

1
Это работает для меня. Microsoft Windows [Version 10.0.17134.648]
Уильям Беттридж-Рэдфорд

Это действительно странно. Так что, если вы скопируете и вставите приведенный выше пример (изменив каталог на существующий), он будет работать для вас?
Тень

Ваша папка на другом диске? Возможно, вам придется добавить /dфлагCD
Уильям Беттридж-Рэдфорд

13

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

3
Мне тоже нравится это, но оно съедает буквы дисков.
ggb667

8

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

cd C:\Windows\

или же

cd %windir%

который делает то же самое. Итак, все, что вам нужно сделать, это:

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

после этого вы можете сделать (где бы вы ни были):

dir %mydir%

или же

cd %mydir%

или что хочешь.


1
Это билет @stephan!
jbchurchill

3

В отличие от Linux, в Windows псевдонимы могут принимать аргументы, и им могут быть заданы параметры для назначения этих аргументов в их определении.

Внутренняя встроенная команда - doskey , это означает, что это не внешний исполняемый файл, находящийся в нем, %SystemRoot%\System32а особенность, cmd.exeкоторая сама по себе находится в папке %SystemRoot%или в %Windir%обеих C:\Windowsпапках и указывает на папку по умолчанию.

Доски определяет псевдонимы среди многих других вещей. В терминологии Windows псевдонимы называются макросами. Чтобы установить псевдоним, который вы используете

doskey alias=command $1 $2 ... $9 or $* (to catch them all) 

Здесь $1указывает на первый аргумент и $*указывает на все аргументы.

Я бы всегда использовал $*двойные кавычки, $1если есть только один аргумент для пропуска пробелов, которые рассматриваются как специальные символы, а именно как разделители (для команд).

Кроме того, вы можете определить макросы псевдонимов в отдельном файле, скажем, LinuxAliases.macroа затем получить его с помощью

doskey /macrofile=LinuxAliases.macro

Он загрузит все псевдонимы, определенные внутри файла, только для текущего сеанса , то есть, когда вы exitвыйдете из cmd.exeпроцесса (также известный как оболочка и командная строка), они исчезнут.

Чтобы иметь постоянные псевдонимы, вы можете ввести полную команду где-нибудь в ключе regedit, называемом либо AutoRun, либо AutoCommand, либо чем-то подобным, что я сейчас не могу вспомнить наряду с внутренним синтаксисом файла макроса: P


Вот официальная и даже лучшая документация для команды.


1

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

@setlocal
@echo off
set userChoice=%1
rem The format is:
rem call :condition SHORTCUT FOLDER
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 We do PUSHD twice since endlocal does popd once :|
if "%userChoice%"=="%1" pushd %2 & pushd %2 & echo pushd %2
if "%userChoice%"=="" echo %1 =^> %2
GOTO :eof

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


0

если вы остаться на том же диске, то есть не 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 сам по себе должен показать мне список закладок каталогов. Это работает, но не уверен, почему я получаю это сообщение "неожиданный компакт-диск".

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 was unexpected at this time.

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

в действии (независимо от того, что значит / + 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):                       

0

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

doskey qcd=cd [pathname]

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

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

doskey [macroname]=[command]

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

doskey word=echo This is a really, really long sentence.

и если вы напечатаете, wordвывод:

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

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

doskey npd=notepad $1

и если вы наберете,npd откроется блокнот, но если мы введем npd test.txt, откроется test.txt в блокноте .

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

doskey prt=echo $*

и если вы напечатаете, prt This is short.то результат будет:

Это коротко.

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

doskey newline=echo $1 $T echo $2

и если вы напечатаете, newline Hello andто результат будет:

Привет

а также

Я надеюсь, вы понимаете.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.