Come impostare un alias nella riga di comando di Windows?


66

Lavoravo su bash e beneficiavo molto dell'alias. Esiste un modo equivalente nella riga di comando di Windows?

Non voglio simulare un ambiente Linux, quindi Cygwin non è una scelta. Ho solo bisogno di una scorciatoia per un comando molto lungo, come cd a_very_long_path.


5
Dovresti usare doskey(non lasciarti ingannare dal nome, non è il vecchio doskey di MS DOS). Utilizzare doskey /?per ulteriori informazioni. A parte questo, temo, questa domanda è fuori tema qui.
Christian.K,

Possibile duplicato di Esiste un comando per cambiare il percorso dalla posizione corrente alla directory predefinita, nel prompt dei comandi di Windows? In particolare, vedere la mia risposta per sapere come è possibile caricare automaticamente le macro DOSKey all'apertura del prompt dei comandi.
Karan

correlati + un modo per rendere permanente doskey superuser.com/questions/49170/…
laggingreflex

Risposte:


61

Come ha detto Christian.K nel suo commento, il comando DOSKEY può essere utilizzato per definire macro analoghe agli alias.

doskey macroName=macroDefinition

I parametri macro sono indicati nella definizione tramite $posizioni prefissate: $1attraverso $9e $*per tutti.

Vedere la documentazione di doskey technet o digitare doskey /?o help doskeydalla riga di comando per ulteriori informazioni.

Ma ci sono serie limitazioni con le macro DOSKEY:

  • Le macro funzionano solo sulla riga di comando interattiva: non funzionano all'interno di uno script batch.
  • Non possono essere usati su entrambi i lati di un tubo: entrambi someMacro|findstr '^'e dir|someMacrofalliscono.
  • Non possono essere utilizzati all'interno di un comando FOR / F: for /f %A in ('someMacro') do ...non riesce

I limiti sono così gravi che raramente uso le macro DOSKEY.

Ovviamente puoi creare script batch invece di macro e assicurarti che le posizioni degli script siano nel tuo PERCORSO. Ma poi devi anteporre ogni script con CALL se vuoi usare lo script all'interno di un altro script.

È possibile creare semplici "macro" variabili per comandi lunghi e spesso utilizzati, ma la sintassi è un po 'scomoda da digitare, poiché è necessario espandere la "macro" quando si desidera utilizzarla.

Definizione:

set "cdMe=cd a_very_long_path"

Utilizzo (dalla riga di comando o dallo script)

%cdMe%

Grazie, allora c'è un modo di lavorare all'interno di uno script batch?
StarPinkER

@JermaineXu - Assolutamente no con le macro DOSKEY. Vedi la mia risposta aggiornata per le alternative grezze.
dbenham,

2
Il pro della seconda soluzione è che le tubazioni funzioneranno. La prima soluzione con doskey non funzionerà quando si desidera utilizzare la macro nelle tubazioni.
Amministratore delegato di Apartico il

? come posso rendere visibili queste macro nella casella Win + R (Esegui finestra di dialogo)
ZEE

@ZEE - Non puoi. Le macro DOSKEY devono essere fisicamente inserite in una finestra della console che esegue cmd.exe.
dbenham,

15

Puoi creare uno script batch e salvarlo nel tuo percorso.

Su Linux potresti creare uno script e aggiungerlo alla cartella ~/binsu Windows per fare lo stesso.

Aggiungi %USERPROFILE%\binalla tua PATHvariabile di ambiente. Quindi salva i tuoi script lì dentro.

quickcd.cmd

@echo off
cd /d a_very_long_path

Ora puoi digitare quickcddalla riga di comando.

Può anche essere chiamato all'interno di uno script usando la callfunzione

call quickcd

Questo non funziona: l'impostazione della directory all'interno di un file batch influisce solo sul file batch. Il percorso viene ripristinato all'uscita del file batch.
Ombra

1
Funziona per me. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford il

È davvero strano. Quindi se copi e incolli l'esempio sopra (cambiando la directory con una esistente) funziona per te?
Shadow

La tua cartella è su un'altra unità? Potrebbe essere necessario aggiungere la /dbandiera aCD
William Bettridge-Radford il

13

subst

Se stai davvero cercando di aggirare qualcosa del genere:

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

È possibile utilizzare il substcomando per mappare quel percorso lungo a una lettera di unità separata

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

Quindi, quando vuoi saltare in quella cartella, puoi semplicemente digitare m:dalla riga di comando.

Il vantaggio di questo doskeyè che funziona in tutti i programmi batch e viene visualizzato in qualsiasi finestra di dialogo dei file in Windows.

Se non vuoi più la mappatura:

subst m: /D

3
Mi piace anche questo ma consuma lettere di unità.
ggb667,

8

Puoi usare lo stesso trucco che utilizza Windows: imposta una variabile d'ambiente (o solo una variabile in un contesto batch) per esempio c'è una variabile d'ambiente% windir% (e alcuni altri) Quindi puoi fare un

cd C:\Windows\

o

cd %windir%

che fa lo stesso. Quindi tutto ciò che devi fare è:

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

dopodiché puoi fare (ovunque tu sia):

dir %mydir%

o

cd %mydir%

o qualunque cosa tu voglia.


1
Questo è il biglietto @stephan!
Jbchurchill,

3

A differenza di Linux, in Windows gli alias possono accettare argomenti e possono ricevere parametri per assegnare tali argomenti nella loro definizione.

Il comando interno incorporato è doskey , il che significa che non è un file eseguibile esterno in cui si trova %SystemRoot%\System32ma è una funzionalità di cmd.execui esso stesso si trova %SystemRoot%o %Windir%che punta entrambi alla C:\Windowscartella per impostazione predefinita.

Doskey definisce gli alias tra molte altre cose. Nella terminologia di Windows, gli alias sono chiamati macro. Per impostare un alias che usi

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

Qui $1punta al primo argomento e $*punta a tutti gli argomenti.

Userei sempre una $*doppia citazione $1se c'è solo un argomento per omettere gli spazi che sono trattati come caratteri speciali, vale a dire come separatori (per i comandi).

Inoltre, puoi definire le macro dei tuoi alias in un file separato, dire LinuxAliases.macroe quindi sorgente usando

doskey /macrofile=LinuxAliases.macro

Caricherà tutti gli alias definiti all'interno del file solo per la sessione corrente , il che significa che quando sei exitfuori cmd.exeprocesso (noto anche come shell e prompt dei comandi), non ci sono più.

Per avere alias permanenti puoi digitare il comando completo da qualche parte in una chiave regedit chiamata AutoRun o AutoCommand o qualcosa di simile, cosa che non riesco a ricordare ora insieme alla sintassi interna del file macro: P


Ecco la documentazione ufficiale e persino migliore per il comando.


1

Ho creato un "alias" come quello specifico per cambiare directory. Fondamentalmente ho creato un file chiamato fav.bate l'ho messo in una cartella in PERCORSO (ad es. 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

Quindi posso passare a qualsiasi cartella predefinita molto rapidamente. Ho scritto un articolo completo su quella tecnica qui .


0

supponendo che si rimane sulla stessa unità, vale a dire senza D:quindi cd D:\somedir\bisogno.

Nel mio caso, C: contiene i file di sistema, ma tutto il lavoro è su D:

2 parti. prima imposta alcune directory di lavoro, usando un file batch.

diciamo localprofile.cmd . Puoi avere più di questi, basta eseguirli secondo necessità.

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

ora usa un altro file di comando per spostarti, in base alle variabili d'ambiente che hai appena impostato.

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%

E un po 'di un esempio di utilizzo:

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 da solo dovrebbe mostrarmi l'elenco delle directory con segnalibri. Funziona, ma non sono sicuro del motivo per cui sto ricevendo questo messaggio "cd inatteso".

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> 

Lotti regolari .cmd

Oltre alla navigazione nella directory, puoi creare un foo.cmd da qualche parte sul tuo PERCORSO e può agire come un alias. Ricorda, a differenza delle shell Linux / OSX, i file cmd possono influire sulle variabili di ambiente e sulla sessione, senza la necessità di originarle .

Ho un cdbin.cmd per navigare su di me, ad esempio:

d:
cd \home\bin

E questo è un grep.cmd pseudo-grep

findstr -n %1 %2

in azione (qualunque sia l'ordinamento / + 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

Puoi usare doskey.exe , ecco un esempio:

doskey qcd=cd [pathname]

E ora se digiti qcd, eseguirà il cd su quel percorso.

Ecco qualche aiuto con le macro di doskey :

doskey [macroname]=[command]

Questa è la forma più semplice, ecco un esempio:

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

e se si digita wordl'output è:

Questa è una frase davvero molto lunga.

Puoi usare $ 1- $ 9 per i parametri, ecco un esempio:

doskey npd=notepad $1

e se lo digiti npdaprirà il blocco note ma se npd test.txtlo digitiamo aprirà test.txt nel blocco note .

Puoi usare $ * per tutti i parametri, ecco un altro esempio:

doskey prt=echo $*

e se digiti, prt This is short.l'output sarà:

Questo è breve.

Puoi usare $ T per più comandi, ecco un esempio:

doskey newline=echo $1 $T echo $2

e se digiti, newline Hello andl'output sarà:

Ciao

e

Spero che tu capisca.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.