2013-03-04 07:28:04 +0000 2013-03-04 07:28:04 +0000
71
71

Come impostare un alias nella riga di comando di Windows?

Lavoravo su bash e ho beneficiato molto degli alias. C'è un modo equivalente in Windows Command Line?

Non voglio simulare un ambiente Linux, quindi cygwin non è una scelta. Ho solo bisogno di una scorciatoia per alcuni comandi molto lunghi, come cd a_very_long_path.

Risposte (7)

68
68
68
2013-03-04 12:03:15 +0000

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

doskey macroName=macroDefinition

I parametri delle macro sono referenziati nella definizione attraverso le posizioni con prefisso $: $1 attraverso $9 e $* per tutti.

Vedi la documentazione doskey technet , o digita doskey /? o help doskey dalla riga di comando per maggiori informazioni.

Ma ci sono serie limitazioni con le macro DOSKEY:

  • Le macro funzionano solo sulla linea di comando interattiva - non funzionano all'interno di uno script batch.
  • Non possono essere usate su entrambi i lati di una pipe: Sia someMacro|findstr '^' che dir|someMacro falliscono.
  • Non possono essere usati all'interno di un comando FOR /F: for /f %A in ('someMacro') do ... fallisce

Le limitazioni sono così severe che uso raramente le macro DOSKEY.

Ovviamente potete creare script batch al posto delle macro, e assicurarvi che le posizioni degli script siano nel vostro PATH. Ma poi dovete prefissare ogni script con CALL se volete usare lo script all'interno di un altro script.

Si possono creare semplici “macro” variabili per comandi lunghi e usati spesso, ma la sintassi è un po’ scomoda da digitare, dato che bisogna espandere la “macro” quando la si vuole usare.

Definizione:

set "cdMe=cd a_very_long_path"

Uso (da linea di comando o script)

%cdMe%
16
16
16
2013-03-04 13:01:49 +0000

Puoi fare uno script batch e salvarlo nel tuo percorso.

Su Linux dovresti fare uno script e aggiungerlo alla cartella ~/bin su Windows puoi fare lo stesso.

Aggiungete %USERPROFILE%\bin alla vostra variabile d'ambiente PATH. Poi salvate i vostri script lì dentro.

quickcd.cmd

@echo off
cd /d a_very_long_path

Ora puoi digitare quickcd sulla linea di comando.

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

call quickcd
14
14
14
2014-01-09 06:21:00 +0000

subst

Se stai davvero cercando di aggirare qualcosa del genere

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

Puoi usare il comando subst per mappare quel lungo percorso su una lettera di unità separata

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

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

Il vantaggio di questo rispetto a doskey è che funziona in tutti i programmi batch, e si presenta in qualsiasi finestra di dialogo dei file in Windows.

Se non volete più la mappatura:

subst m: /D
10
10
10
2013-03-11 10:14:50 +0000

Potreste usare lo stesso trucco che usa windows: impostare una variabile d'ambiente (o semplicemente una variabile in un contesto batch) per esempio c'è una variabile d'ambiente %windir% (e alcune altre) Quindi potete fare un

cd C:\Windows\

o

cd %windir%

che fa lo stesso. Quindi tutto quello che dovete fare è:

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

dopo di che potete fare (da ovunque siate):

dir %mydir%

o

cd %mydir%

o quello che volete.

1
1
1
2015-09-09 18:42:36 +0000

Ho creato un “alias” del genere appositamente per cambiare directory. Fondamentalmente ho creato un file chiamato fav.bat e l'ho messo in una cartella in PATH (ad esempio 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

Poi posso saltare a qualsiasi cartella predefinita molto velocemente. Ho scritto un articolo completo su questa tecnica qui .

1
1
1
2019-02-18 12:41:06 +0000

Potete usare doskey.exe, ecco un esempio:

doskey qcd=cd [pathname]

E ora se digitate qcd allora cd in quel percorso.

Ecco un aiuto per le macro doskey:

doskey [macroname]=[command]

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

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

e se digitate word l'output è:

Questa è una frase molto, molto lunga.

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

doskey npd=notepad $1

e se digitate npd si aprirà notepad ma se digitiamo npd test.txt si aprirà test.txt in notepad.

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

doskey prt=echo $*

e se digitate prt This is short. allora l'output sarà:

Questo è breve.

Puoi usare $T per comandi multipli, ecco un esempio:

doskey newline=echo $1 $T echo $2

e se digiti newline Hello and allora l'output sarà:

Ciao

e

Spero che tu abbia capito.

0
0
0
2016-11-16 18:41:42 +0000

supponendo che tu rimanga sulla stessa unità, cioè senza D: allora cd D:\somedirsupponendo che tu rimanga sulla stessa unità, cioè senzaD:` allora necessario.

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

2 parti. per prima cosa impostare alcune directory di lavoro, usando un file batch.

diciamo localprofile.cmd. Potete averne più di uno, basta eseguirli come necessario.

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

ora usate un altro file di comando per spostarvi, in base alle variabili d'ambiente che avete 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 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 la lista delle directory con segnalibri. Funziona, ma non so perché sto ricevendo questo messaggio “cd inaspettato”.

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 di .cmd

A parte la navigazione nelle directory, puoi creare un foo.cmd da qualche parte nel tuo PATH e può agire come un alias. Ricordate, a differenza delle shell di Linux/OSX, i file cmd possono influenzare le variabili d'ambiente e la sessione, senza bisogno di source.

Ho un cdbin.cmd per navigare, per esempio:

d:
cd \home\bin

E questo è uno pseudo-grep grep.cmd

findstr -n %1 %2

in azione (qualunque cosa significhi 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):