Як встановити псевдонім у командному рядку 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.