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

J'avais l'habitude de travailler sur bash et je profite beaucoup d'alias. Existe-t-il un moyen équivalent dans la ligne de commande Windows?

Je ne veux pas simuler un environnement Linux, donc 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 .

Comme Christian.K a déclaré dans son commentaire, la commande DOSKEY peut être utilisée pour définir des macros, qui sont analogues aux alias.

 doskey macroName=macroDefinition 

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

Voir la documentation techno doskey , ou tapez doskey /? Ou help doskey partir de la ligne de commande pour plus d'informations.

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

  • Les macros ne fonctionnent que sur la ligne de commande interactive – elles ne fonctionnent pas dans un script de lot.
  • Ils ne peuvent pas être utilisés de part et d'autre d'un tuyau: les uns des autres, someMacro|findstr '^' et dir|someMacro échouent.
  • Ils ne peuvent pas être utilisés dans les commandes FOR / F: for /f %A in ('someMacro') do ... échoue

Les limitations sont si sévères que j'utilise rarement des macros DOSKEY.

De toute évidence, vous pouvez créer des scripts par lots au lieu de macros, et assurez-vous que les emplacements des scripts sont dans votre PATH. Mais alors, vous devez préfixer chaque script avec CALL si vous souhaitez utiliser le script dans un autre script.

Vous pouvez créer des «macros» de variables simples pour les commandes longues et souvent utilisées, mais la syntaxe est un peu gênante pour 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% 

SUBST

Si vous essayez vraiment de contourner quelque chose comme ceci:

C: cd \ users \ myLoginID \ documents \ clients \ MTV \ stratégie \ feuille de route \ livrable \ final

Vous pouvez utiliser la commande subst pour mapper ce long chemin vers une lettre de lecteur séparée

Subst m: c: \ users \ myLoginID \ documents \ clients \ MTV \ stratégie \ feuille de route \ deliverable \ final

Ensuite, lorsque vous souhaitez sauter dans ce dossier, vous pouvez simplement taper m: à la ligne de commande.

L'avantage de ce doskey est qu'il fonctionne dans tous les programmes par lots, et s'affiche dans n'importe quelle boîte de dialogue de fichiers dans Windows.

Si vous ne voulez plus la cartographie:

Subst m: / D

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

Sur Linux, vous créez un script et l'ajoutez au dossier ~/bin sur Windows, vous pouvez faire la même chose.

Ajoutez %USERPROFILE%\bin à votre variable d'environnement PATH . Ensuite, enregistrez vos scripts là-bas.

quickcd.cmd

 @echo off cd a_very_long_path 

Maintenant, vous pouvez taper quickcd à la ligne de commande.

Il peut également être appelé dans un script à l'aide de la fonction d' call

 call quickcd 

Vous pouvez utiliser le même tour, que Windows utilise: définissez une variable d'environnement (ou juste une variable dans un contexte de lot), par exemple, il existe une variable d'environnement% windir% (et d'autres). Vous pouvez donc faire une

 cd C:\Windows\ 

ou

 cd %windir% 

Qui fait de même. Donc, tous, vous devez le faire:

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

Ensuite, vous pouvez le faire (de votre part):

 dir %mydir% 

ou

 cd %mydir% 

Ou tout ce que vous voulez.

J'ai fait un «alias» comme celui-ci spécifiquement pour modifier le répertoire. Fondamentalement, j'ai créé un fichier nommé fav.bat et le mettre dans un dossier dans 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 sauter rapidement dans n'importe quel dossier prédéfini. J'ai écrit ici un article complet sur cette technique.

En supposant que vous restez sur le même lecteur, c.-à-d. Pas D: alors cd D:\somedir\ needed.

Dans mon cas, C: contient des fichiers système, mais tout fonctionne sur D:

2 parties. Définissez d'abord certains répertoires de travail, en utilisant un fichier batch.

Disons localprofile.cmd . Vous pouvez en avoir plusieurs, il suffit de les exécuter au besoin.

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

Utilisez maintenant 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 peu d'utilisation d'un échantillon:

 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 bookmarked. 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> 

Les lots réguliers .cmd

Mis à part la navigation par répertoire, vous pouvez créer un foo.cmd quelque part sur votre PATH et cela peut servir d'alias. Rappelez-vous, contrairement aux shells Linux / OSX, les fichiers cmd peuvent affecter les variables d'environnement et la session sans avoir besoin de les créer .

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

 d: cd \home\bin 

Et c'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): 

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

La commande intégrée interne est doskey , c'est-à-dire qu'il ne s'agit pas d'un fichier exécutable externe situé dans %SystemRoot%\System32 mais est une fonctionnalité de cmd.exe qui est elle-même située dans %SystemRoot% ou %Windir% pointant vers C:\Windows Dossier par défaut.

Doskey définit des 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) 

Voici $1 points pour le premier argument, et $* indique les arguments.

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

De plus, vous pouvez définir vos macros d' alias dans un fichier distinct, disons LinuxAliases.macro , puis la source en utilisant

 doskey /macrofile=LinuxAliases.macro 

Il va charger tous les alias définis dans le fichier pour la session en cours uniquement, c'est-à-dire lorsque vous exit processus cmd.exe (également connu sous le nom shell et l'invite de commande), ils sont partis.

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 me rappelle plus maintenant de la syntaxe interne du fichier macro: P


Voici les documentations officielles et encore meilleures pour la commande.

Une question similaire a été posté sur StackOverflow et une bonne solution a été dans ce commentaire https://stackoverflow.com/a/21040825/2505342