Як встановити псевдонім у командному рядку Windows?


66

Раніше я працював на баші і багато отримував користь від псевдоніма. Чи є еквівалентний спосіб у командному рядку Windows?

Я не хочу імітувати середовище Linux, тому cygwin - це не вибір. Мені просто потрібний ярлик для якоїсь дуже довгої команди, наприклад cd a_very_long_path.


5
Ви б використовували doskey(не обманюйте ім'я, це не старий MS DOS doskey). Використовуйте doskey /?для отримання додаткової інформації. Окрім цього, я боюся, це питання тут поза темою.
Крістіан.К

Можливий дублікат Чи є команда змінити шлях від поточного місцезнаходження до каталогу за замовчуванням у командному рядку Windows? Зокрема, дивіться мою відповідь, щоб дізнатися, як можна дозволити автоматичне завантаження ваших макросів DOSKey при відкритті командного рядка.
Каран

пов'язаний + спосіб зробити 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 Дивіться мою оновлену відповідь щодо сировинних альтернатив.
dbenham

2
Проблема другого рішення полягає в тому, що трубопроводи працюватимуть. Перше рішення з doskey не працюватиме, коли ви хочете використовувати макрос у трубопроводах.
генеральний директор в Апартіко

Як я можу помістити ці макроси у поле 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.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.