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:
someMacro|findstr '^'
et dir|someMacro
échouent. 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