web-dev-qa-db-fra.com

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

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 commande très longue, comme cd a_very_long_path.

62
StarPinkER

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 les positions préfixées $: $1 à $9 et $* pour toutes.

Voir la documentation de doskey technet , ou tapez doskey /? ou help doskey à partir 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 des deux côtés d'un tuyau: someMacro|findstr '^' et dir|someMacro échouent.
  • Ils ne peuvent pas être utilisés dans une commande FOR/F: for /f %A in ('someMacro') do ... échoue

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 difficile à 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%
57
dbenham

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 ~/bin sous Windows. Vous pouvez faire de même.

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

quickcd.cmd

@echo off
cd /d a_very_long_path

Vous pouvez maintenant taper quickcd en ligne de commande.

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

call quickcd

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 commande subst 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 à ce dossier, vous pouvez simplement taper m: sur la ligne de commande.

L’avantage de ceci par rapport à doskey est qu’elle 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
12
Harley Young

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%

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.

8
stephan

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%\System32 mais d'une fonctionnalité de cmd.exe, elle-même située dans %SystemRoot% ou %Windir%, les deux pointant par défaut sur le dossier C:\Windows.

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, $1 désigne le premier argument et $* désigne tous les arguments.

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

De plus, vous pouvez définir votre alias les macros dans un fichier séparé, dites LinuxAliases.macro, puis utilisez le source

doskey /macrofile=LinuxAliases.macro

Il chargera tous les alias définis dans le fichier pour la session seulement actuelle, ce qui signifie que lorsque vous exit processus cmd.exe (également appelé shell et invite de commande), ils disparu.

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 macro: P


Voici les documentations official , et même better pour la commande.

2
user373230

J'ai créé un "alias" comme celui-ci spécialement pour changer de répertoire. Fondamentalement, j'ai créé un fichier nommé fav.bat et 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 .

1
VitalyB

Vous pouvez utiliser doskey.exe , voici un exemple:

doskey qcd=cd [pathname]

Et maintenant, si vous tapez qcd, alors ce sera cd dans ce chemin.

Voici de l'aide avec doskey macro's:

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 Word, le résultat 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 npd, il ouvrira notepad mais si nous tapons npd test.txt, il ouvrira test.txt in notepad .

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

doskey prt=echo $*

et si vous tapez prt This is short., 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 and, le résultat sera:

Bonjour

et

J'espère que tu comprends.

0
Hayz

Une question similaire a été posée sur StackOverflow et la solution de Nice était dans ce commentaire https://stackoverflow.com/a/21040825/2505342

0
Alx Lark

en supposant que vous restiez sur le même lecteur, c’est-à-dire que vous n’avez pas besoin de D: puis cd D:\somedir\.

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 foo.cmd quelque part sur votre PATH et il peut s’agir d’un alias. Rappelez-vous, contrairement aux shells Linux/OSX, les fichiers cmd peuvent affecter les variables d’environnement et la session, sans avoir besoin de source them.

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):                       
0
JL Peyret