Comment définir un alias dans la ligne de commande Windows?

66

J'avais l'habitude de travailler sur bash et de bénéficier de nombreux pseudonymes. Existe-t-il un moyen équivalent dans la ligne de commande Windows?

Je ne veux pas simuler un environnement Linux, alors cygwin n'est pas un choix. J'ai juste besoin d'un raccourci pour une très longue commande, comme cd a_very_long_path.

StarPinkER
la source
5
Vous utiliseriez doskey(ne vous fiez pas au nom, ce n’est pas l’ancien doskey MS DOS). Utilisez doskey /?pour plus d'informations. En dehors de cela, j'ai bien peur que cette question ne soit pas traitée ici.
Christian.K
Double possible de Y a - t-il une commande permettant de changer le chemin d'accès de l'emplacement actuel au répertoire par défaut, à l'invite de commande Windows? Plus précisément, voir ma réponse pour savoir comment vous pouvez charger automatiquement vos macros DOSKey lorsque l’invite de commande est ouverte.
Karan
connexes + un moyen de rendre doskey permanent superuser.com/questions/49170/…
laggingreflex

Réponses:

61

Comme Christian.K l'a dit dans son commentaire, la commande DOSKEY peut être utilisée pour définir des macros analogues à des alias.

doskey macroName=macroDefinition

Les paramètres de macro sont référencés dans la définition via des $positions préfixées: à $1travers $9et $*pour tous.

Voir la documentation de doskey technet , ou tapez doskey /?ou à help doskeypartir de la ligne de commande pour plus d'informations.

Mais il existe de sérieuses limitations avec les macros DOSKEY:

  • Les macros ne fonctionnent que sur la ligne de commande interactive - elles ne fonctionnent pas dans un script batch.
  • Ils ne peuvent pas être utilisés de chaque côté d'un tuyau: deux someMacro|findstr '^'et dir|someMacrone.
  • Ils ne peuvent pas être utilisés dans une commande FOR / F: for /f %A in ('someMacro') do ...échec

Les limitations sont si graves que j'utilise rarement les macros DOSKEY.

Évidemment, vous pouvez créer des scripts batch au lieu de macros et vous assurer que les emplacements des scripts sont dans votre PATH. Mais ensuite, vous devez préfixer chaque script avec CALL si vous souhaitez utiliser le script dans un autre script.

Vous pouvez créer de simples "macros" de variables pour des commandes longues et souvent utilisées, mais la syntaxe est un peu délicate à taper, car vous devez développer la "macro" lorsque vous souhaitez l’utiliser.

Définition:

set "cdMe=cd a_very_long_path"

Utilisation (à partir de la ligne de commande ou du script)

%cdMe%
Dbenham
la source
Merci, y a-t-il moyen de travailler dans un script batch?
StarPinkER
@JermaineXu - C'est impossible avec les macros DOSKEY. Voir ma réponse mise à jour pour les alternatives brutes.
Dbenham
2
Le pro de la deuxième solution est que, la tuyauterie fonctionnera. La première solution avec doskey ne fonctionnera pas si vous souhaitez utiliser la macro dans la tuyauterie.
CEO à Apartico
? comment puis-je mettre ces macros visibles dans la zone Win + R (boîte de dialogue Exécuter)
ZEE
@ ZEE - Vous ne pouvez pas. Les macros DOSKEY doivent être physiquement saisies dans une fenêtre de console qui exécute cmd.exe.
Dbenham
15

Vous pouvez créer un script batch et l'enregistrer dans votre chemin.

Sous Linux, vous pouvez créer un script et l'ajouter au dossier ~/binde Windows. Vous pouvez faire de même.

Ajoutez %USERPROFILE%\binà votre PATHvariable d'environnement. Puis enregistrez vos scripts ici.

quickcd.cmd

@echo off
cd /d a_very_long_path

Vous pouvez maintenant taper quickcdsur la ligne de commande.

Il peut aussi être appelé dans un script en utilisant la callfonction

call quickcd
William Bettridge-Radford
la source
Cela ne fonctionne pas - la définition du répertoire dans un fichier de commandes n’affecte que le fichier de commandes. Le chemin est rétabli à la sortie du fichier de commandes.
Shadow
1
Cela fonctionne pour moi. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford
C'est vraiment étrange. Donc, si vous copiez et collez l'exemple ci-dessus (en changeant le répertoire en un répertoire existant), cela fonctionne pour vous?
Shadow
Votre dossier est-il sur un autre lecteur? Vous pourriez avoir besoin d'ajouter le /ddrapeau àCD
William Bettridge-Radford
13

subst

Si vous essayez vraiment de contourner quelque chose comme ceci:

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

Vous pouvez utiliser la substcommande pour mapper ce long chemin sur une lettre de lecteur distincte.

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

Ensuite, lorsque vous souhaitez accéder m:à ce dossier, vous pouvez simplement taper sur la ligne de commande.

L'avantage de cela doskeyest qu'il fonctionne dans tous les programmes de traitement par lots et s'affiche dans n'importe quelle boîte de dialogue de fichier de Windows.

Si vous ne voulez plus le mappage:

subst m: /D
Harley Young
la source
3
J'aime aussi ça, mais ça mange des lettres de lecteur.
ggb667
8

Vous pouvez utiliser le même truc, que Windows utilise: définissez une variable d’environnement (ou simplement une variable dans un contexte de lot), par exemple, il existe une variable d’environnement% windir% (et quelques autres).

cd C:\Windows\

ou

cd %windir%

qui fait la même chose. Donc, tout ce que vous devez faire est:

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

après cela, vous pouvez faire (où que vous soyez):

dir %mydir%

ou

cd %mydir%

ou ce que vous voulez.

stephan
la source
1
C'est le billet @stephan!
jbchurchill
3

Contrairement à Linux, dans Windows, les alias peuvent prendre des arguments et des paramètres peuvent être assignés pour les affecter dans leur définition.

La commande interne intégrée est doskey , ce qui signifie qu'il ne s'agit pas d'un fichier exécutable externe situé dans, %SystemRoot%\System32mais d'une fonctionnalité cmd.exedont il est lui-même situé, %SystemRoot%ou les %Windir%deux pointant vers un C:\Windowsdossier par défaut.

Doskey définit les alias parmi beaucoup d'autres choses. Dans la terminologie Windows, les alias sont appelés macros. Pour définir un alias que vous utilisez

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

Ici $1pointe vers le premier argument et $*pointe vers tous les arguments.

J'utiliserais toujours $*des guillemets doubles $1s'il n'y avait qu'un seul argument pour omettre les espaces traités comme des caractères spéciaux, à savoir comme des séparateurs (pour les commandes).

De plus, vous pouvez définir vos macros d’ alias dans un fichier séparé, par exemple LinuxAliases.macro, puis le rechercher en utilisant

doskey /macrofile=LinuxAliases.macro

Il ne chargera que tous les alias définis dans le fichier pour la session en cours , ce qui signifie que lorsque vous êtes en exitfin de cmd.exeprocessus (également appelé shell et invite de commande), ils sont supprimés.

Pour avoir des alias permanents, vous pouvez taper la commande complète quelque part dans une clé regedit appelée AutoRun ou AutoCommand ou quelque chose de similaire, ce que je ne peux pas rappeler maintenant à côté de la syntaxe interne du fichier de macro: P


Voici la documentation officielle et encore meilleure pour la commande.


la source
1

J'ai créé un "alias" comme celui-ci spécialement pour changer de répertoire. Fondamentalement, j'ai créé un fichier nommé fav.batet l' ai placé dans un dossier de PATH (par exemple, 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

Ensuite, je peux accéder très rapidement à n’importe quel dossier prédéfini. J'ai écrit un article complet sur cette technique ici .

VitalyB
la source
0

en supposant que vous restez sur le même disque, c. -à- pas D:alors cd D:\somedir\nécessaire.

Dans mon cas, C: contient les fichiers système, mais tout le travail est sur D:

2 parties. Commencez par définir des répertoires de travail à l’aide d’un fichier de commandes.

disons localprofile.cmd . Vous pouvez en avoir plusieurs, exécutez-les au besoin.

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

Maintenant, utilisez un autre fichier de commande pour vous déplacer, en fonction des variables d'environnement que vous venez de définir.

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%

Et un exemple d'utilisation:

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 par lui-même est censé me montrer la liste des répertoires favoris. Cela fonctionne, mais je ne sais pas pourquoi je reçois ce message "CD inattendu".

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> 

Lots .cmd réguliers

En plus de la navigation dans les répertoires, vous pouvez créer un fichier foo.cmd quelque part sur votre chemin PATH et il peut s’agir d’un alias. N'oubliez pas que, contrairement aux interpréteurs de commandes Linux / OSX, les fichiers cmd peuvent affecter les variables d'environnement et la session, sans avoir besoin de les générer .

J'ai un cdbin.cmd pour me diriger, par exemple:

d:
cd \home\bin

Et ceci est un pseudo-grep grep.cmd

findstr -n %1 %2

en action (quel que soit le type / + 2 / + 10 signifie)

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
la source
0

Vous pouvez utiliser doskey.exe , voici un exemple:

doskey qcd=cd [pathname]

Et maintenant, si vous tapez, qcdil sera envoyé à ce chemin.

Voici de l'aide avec les macros doskey :

doskey [macroname]=[command]

C'est la forme la plus simple, voici un exemple:

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

et si vous tapez wordla sortie est:

C'est une très très longue phrase.

Vous pouvez utiliser $ 1- $ 9 pour les paramètres, voici un exemple:

doskey npd=notepad $1

et si vous tapez npdcela ouvrira le bloc-notes mais si nous tapons npd test.txtcela ouvrira test.txt dans le bloc-notes .

Vous pouvez utiliser $ * pour tous les paramètres, voici un autre exemple:

doskey prt=echo $*

et si vous tapez prt This is short.alors le résultat sera:

C'est court.

Vous pouvez utiliser $ T pour plusieurs commandes, voici un exemple:

doskey newline=echo $1 $T echo $2

et si vous tapez newline Hello andalors le résultat sera:

Salut

et

J'espère que tu comprends.

Hayz
la source