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
.
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:
someMacro|findstr '^'
et dir|someMacro
échouent.for /f %A in ('someMacro') do ...
échoueLes 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%
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
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.
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.
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 .
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.
Une question similaire a été posée sur StackOverflow et la solution de Nice était dans ce commentaire https://stackoverflow.com/a/21040825/2505342
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):