62

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

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

9 ответов9

54

Как христианин.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 ... fails

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

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

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

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

set "cdMe=cd a_very_long_path"

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

%cdMe%
13

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

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

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

quickcd.cmd

@echo off
cd a_very_long_path

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

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

call quickcd
12

SUBST

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

c: cd \users \myLoginID \ Documents \ clients \ MTV \ стратегии \ дорожная карта \ поставляемый \ финальный

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

subst m: c:\users\myLoginID\ Documents \ clients \ MTV \ стратегии \ дорожная карта \ поставляемый \ финальный

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

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

Если вам больше не нужно отображение:

Sub M: /D

8

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

cd C:\Windows\

или же

cd %windir%

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

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

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

dir %mydir%

или же

cd %mydir%

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

1

В отличие от 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

Вы можете использовать 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 затем будет вывод:

Привет

а также

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

0

Аналогичный вопрос был размещен на StackOverflow, и хорошее решение было в этом комментарии https://stackoverflow.com/a/21040825/2505342

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):                       

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .