Jak ustawić alias w wierszu poleceń systemu Windows?

66

Kiedyś pracowałem nad bash i korzystałem z aliasu. Czy istnieje jakiś równoważny sposób w wierszu poleceń systemu Windows?

Nie chcę symulować środowiska Linux, więc cygwin nie jest wyborem. Potrzebuję tylko skrótu do bardzo długiego polecenia, na przykład cd a_very_long_path.

StarPinkER
źródło
5
Użyłbyś doskey(nie daj się zwieść nazwie, to nie jest stary doskey MS DOS). Użyj, doskey /?aby uzyskać więcej informacji. Poza tym, obawiam się, że to pytanie jest poza tematem tutaj.
Christian.K
Możliwy duplikat Czy w wierszu polecenia systemu Windows istnieje polecenie zmiany ścieżki z bieżącej lokalizacji na domyślny katalog? W szczególności zapoznaj się z moją odpowiedzią, aby dowiedzieć się, jak możesz automatycznie ładować makra DOSKey po otwarciu wiersza polecenia.
Karan
powiązane + sposób na uczynienie doskey stałym superuser.com/questions/49170/…
laggingreflex

Odpowiedzi:

61

Jak powiedział Christian.K w swoim komentarzu, polecenia DOSKEY można użyć do zdefiniowania makr, które są analogiczne do aliasów.

doskey macroName=macroDefinition

Makroparametry są przywoływane w definicji za pomocą $prefiksowanych pozycji: $1przez $9i $*dla wszystkich.

Aby uzyskać więcej informacji, zobacz dokumentację doskey technet lub wpisz doskey /?lub help doskeyz wiersza polecenia.

Istnieją jednak poważne ograniczenia dotyczące makr DOSKEY:

  • Makra działają tylko w interaktywnym wierszu poleceń - nie działają w skrypcie wsadowym.
  • Nie można ich używać po obu stronach potoku: Oba someMacro|findstr '^'i dir|someMacrozawodzą.
  • Nie można ich używać w poleceniach FOR / F: for /f %A in ('someMacro') do ...kończy się niepowodzeniem

Ograniczenia są tak poważne, że rzadko używam makr DOSKEY.

Oczywiście zamiast makr można tworzyć skrypty wsadowe i upewnić się, że lokalizacje skryptów znajdują się w ŚCIEŻCE. Ale następnie musisz poprzedzić każdy skrypt CALL, jeśli chcesz użyć skryptu w innym skrypcie.

Możesz tworzyć proste „makra” zmiennych dla długich i często używanych poleceń, ale składnia jest nieco trudna do wpisania, ponieważ musisz rozwinąć „makro”, gdy chcesz go użyć.

Definicja:

set "cdMe=cd a_very_long_path"

Użycie (z wiersza poleceń lub skryptu)

%cdMe%
dbenham
źródło
Dzięki, więc czy jest jakiś sposób pracy w skrypcie wsadowym?
StarPinkER,
@JermaineXu - Nie ma mowy o makrach DOSKEY. Zobacz moją zaktualizowaną odpowiedź na surowe alternatywy.
dbenham
2
Zaletą drugiego rozwiązania jest to, że rurociągi będą działać. Pierwsze rozwiązanie z doskey nie zadziała, jeśli chcesz użyć makra w potokach.
CEO w Apartico
? w jaki sposób mogę umieścić te makra widoczne w polu Win + R (okno dialogowe Uruchom)
ZEE
@ZEE - Nie możesz. Makra DOSKEY muszą być fizycznie wpisane w oknie konsoli z uruchomionym programem cmd.exe.
dbenham
15

Możesz utworzyć skrypt wsadowy i zapisać go na swojej ścieżce.

W systemie Linux utworzysz skrypt i dodasz go do folderu w systemie ~/binWindows, możesz zrobić to samo.

Dodaj %USERPROFILE%\bindo PATHzmiennej środowiskowej. Następnie zapisz tam swoje skrypty.

quickcd.cmd

@echo off
cd /d a_very_long_path

Teraz możesz pisać quickcdw wierszu polecenia.

Można go również wywołać w skrypcie za pomocą callfunkcji

call quickcd
William Bettridge-Radford
źródło
To nie działa - ustawienie katalogu w pliku wsadowym wpływa tylko na plik wsadowy. Ścieżka jest cofana po wyjściu z pliku wsadowego.
Shadow
1
To działa dla mnie. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford
To naprawdę dziwne. Więc jeśli skopiujesz i wkleisz powyższy przykład (zmieniając katalog na istniejący), to zadziała dla ciebie?
Shadow
Czy twój folder jest na innym dysku? Być może trzeba dodać /dflagę doCD
William Bettridge-Radford
13

subst

Jeśli naprawdę próbujesz obejść coś takiego:

C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Możesz użyć substpolecenia, aby zamapować tę długą ścieżkę na osobną literę dysku

subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Następnie, jeśli chcesz przejść do tego folderu, możesz po prostu wpisać m:w wierszu polecenia.

Zaletą tego doskeyjest to, że działa we wszystkich programach wsadowych i pojawia się w dowolnym oknie dialogowym pliku w systemie Windows.

Jeśli nie chcesz już mapowania:

subst m: /D
Harley Young
źródło
3
Też mi się podoba, ale zjada litery dysku.
ggb667,
8

Możesz użyć tej samej sztuczki, której używa system Windows: ustaw zmienną środowiskową (lub po prostu zmienną w kontekście wsadowym), na przykład istnieje zmienna środowiskowa% windir% (i kilka innych), więc możesz zrobić

cd C:\Windows\

lub

cd %windir%

który robi to samo. Wszystko, co musisz zrobić, to:

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

potem możesz zrobić (gdziekolwiek jesteś):

dir %mydir%

lub

cd %mydir%

lub cokolwiek chcesz.

stephan
źródło
1
To jest bilet @stephan!
jbchurchill
3

W przeciwieństwie do Linuksa, w systemie Windows aliasy mogą przyjmować argumenty i mogą mieć parametry umożliwiające przypisanie tych argumentów w ich definicji.

Wewnętrzne wbudowane polecenie to doskey , co oznacza, że ​​nie jest to zewnętrzny plik wykonywalny umieszczony w nim, %SystemRoot%\System32ale jego funkcja cmd.exejest domyślnie umieszczona w folderze %SystemRoot%lub w %Windir%obu C:\Windowsprzypadkach.

Doskey definiuje aliasy wśród wielu innych rzeczy. W terminologii Windows aliasy nazywane są makrami. Aby ustawić używany alias

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

Tutaj $1wskazuje na pierwszy argument i $*wskazuje na wszystkie argumenty.

Zawsze używałbym $*podwójnego cudzysłowu, $1jeśli jest tylko jeden argument do pominięcia spacji, które są traktowane jako znaki specjalne, a mianowicie jako separatory (dla poleceń).

Co więcej, możesz zdefiniować makra aliasów w osobnym pliku, powiedz, LinuxAliases.macroa następnie użyj źródła

doskey /macrofile=LinuxAliases.macro

Załaduje wszystkie aliasy zdefiniowane w pliku tylko dla bieżącej sesji , co oznacza, że ​​kiedy jesteś exitpoza cmd.exeprocesem (znany również jako powłoka i wiersz polecenia), znikają.

Aby mieć stałe aliasy, możesz wpisać pełne polecenie gdzieś w kluczu regedit o nazwie AutoRun lub AutoCommand lub coś podobnego, czego nie mogę sobie teraz przypomnieć obok wewnętrznej składni pliku makra: P


Oto oficjalne i jeszcze lepsze dokumentacje dla polecenia.


źródło
1

Zrobiłem taki „alias” specjalnie do zmiany katalogu. Zasadniczo utworzyłem plik o nazwie fav.bati umieściłem go w folderze PATH (np. 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

Następnie mogę bardzo szybko przejść do dowolnego predefiniowanego folderu. Tutaj napisałem pełny artykuł o tej technice .

Witalij B.
źródło
0

zakładając, że pozostajesz na tym samym dysku, tzn. nie jest D:to wtedy cd D:\somedir\potrzebne.

W moim przypadku C: przechowuje pliki systemowe, ale cała praca jest na D:

2 części najpierw ustaw niektóre działające katalogi, używając pliku wsadowego.

powiedzmy localprofile.cmd . Możesz mieć wiele z nich, po prostu uruchom je w razie potrzeby.

set wd1=D:\home\work\fb440.dumper
set wd2=D:\home\work\py\tests

teraz użyj innego pliku poleceń, aby się poruszać, w oparciu o właśnie ustawione zmienne środowiskowe.

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%

I trochę przykładowego użycia:

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 sam powinien pokazać mi listę zakładek dodanych do zakładek. Działa, ale nie jestem pewien, dlaczego otrzymuję ten komunikat „nieoczekiwany 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 was unexpected at this time.

D:\home\work\fb440.dumper> 

Regularne partie .cmd

Oprócz nawigacji w katalogu, możesz utworzyć plik foo.cmd gdzieś na ŚCIEŻCE i może on działać jak alias. Pamiętaj, że w przeciwieństwie do powłok Linux / OSX, pliki cmd mogą wpływać na zmienne środowiskowe i sesję bez konieczności ich pozyskiwania .

Mam cdbin.cmd do nawigacji, na przykład:

d:
cd \home\bin

A to pseudo-grep grep.cmd

findstr -n %1 %2

w akcji (cokolwiek sortuje / + 2 / + 10 oznacza)

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):                       
JL Peyret
źródło
0

Możesz użyć doskey.exe , oto przykład:

doskey qcd=cd [pathname]

A teraz, jeśli wpiszesz qcd, będzie cd do tej ścieżki.

Oto pomoc dotycząca makr doskey :

doskey [macroname]=[command]

To najprostsza forma, oto przykład:

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

a jeśli wpiszesz wordwynik to:

To jest naprawdę, bardzo długie zdanie.

Możesz użyć 1-9 USD za parametry, oto przykład:

doskey npd=notepad $1

a jeśli wpiszesz npd, otworzy notatnik, ale jeśli npd test.txtgo wpiszesz , otworzy test.txt w notatniku .

Możesz użyć $ * dla wszystkich parametrów, oto inny przykład:

doskey prt=echo $*

a jeśli wpiszesz, prt This is short.wynik będzie:

To jest krótkie.

Możesz użyć $ T do wielu poleceń, oto przykład:

doskey newline=echo $1 $T echo $2

a jeśli wpiszesz, newline Hello andwynik będzie:

cześć

i

Mam nadzieję że rozumiesz.

Hayz
źródło