- Вопрос или проблема
- Ответ или решение
- 1. Использование команды DOSKEY
- Создание макроса:
- Ограничения:
- 2. Создание пакетных файлов
- Пример пакетного файла:
- 3. Использование SET для создания переменных
- Пример:
- 4. Использование команды SUBST
- Пример использования:
- 5. Создание окружений и дополнительных сценариев
- Заключение
Вопрос или проблема
Я раньше работал с 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, прежде чем я нашел решение, поэтому я поделюсь своим решением.
- Создайте папку для ваших скриптов
C:\shell-scripts
- Добавьте созданную папку в
PATH
- Внутри этой папки создайте
alias.cmd
и/илиalias.ps1
(в зависимости от того, используете ли вы CMD или PowerShell) - Содержимое файла:
-
pushd "C:\some\path\here"
-
- Убедитесь, что вы закрыли и снова открыли терминал, чтобы загрузить PATH
- Запустите
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
и создание пакетных файлов. Каждый метод имеет свои преимущества, и выбор зависит от ваших предпочтений и требований.
Если у вас есть какие-либо дополнительные вопросы или нужна помощь в реализации, не стесняйтесь спрашивать!