55 votes

Créer un alias dans Windows XP

À l'école, j'avais l'habitude d'avoir un fichier .login du genre

alias ll = ls -l  
alias dir = ls -Fhl  
alias web = cd ~/public/public_www/development  

J'aimerais faire ce genre de choses avec ma boîte XP ici au travail, mais la plupart des ressources que j'ai trouvées en ligne semblent assez compliquées et lourdes. Existe-t-il un moyen de le faire sans avoir à fouiller dans la base de registre ou à exécuter un gros fichier batch ?

La raison initiale de ma question était que je n'ai besoin de la ligne de commande que pour une commande dans un dossier spécifique, et je voulais pouvoir accéder rapidement à ce dossier lorsque je lançais la ligne de commande. Mais la réponse acceptée pour cette question est si bonne que j'ai décidé de poser ma question initiale dans une question distincte : Changement du dossier de démarrage par défaut pour l'invite de commande de Windows .

0voto

Krish Points 111

Je l'ai fait avec un rapide script en Python :

import sys
import string
import os
import glob

def listAll():
        for infile in glob.glob("c:\\aliases\\*.bat"):
            fileName = infile
            fileName = fileName[len("c:\\aliases\\"):len(fileName)-4]
            fileContents = open("c:\\aliases\\" + fileName + ".bat", "r")
            fileContents.readline()
            fileContentString=fileContents.readline()
            fileName += " is aliased to "
            fileName += fileContentString[0:len(fileContentString)-3]
            print fileName

def listSome(which):
        for infile in glob.glob("c:\\aliases\\*.bat"):
            fileName = infile
            fileName = fileName[len("c:\\aliases\\"):len(fileName)-4]
            fileContents = open("c:\\aliases\\" + fileName + ".bat", "r")
            fileContents.readline()
            fileContentString=fileContents.readline()
            if fileName.find(which)==0:
                fileName += " is aliased to "
                fileName += fileContentString[0:len(fileContentString)-3]
                print fileName

if len(sys.argv)>1:
    if sys.argv[1]!="-p":
        file = open("c:\\aliases\\"+sys.argv[1]+".bat", "w")
        file.write("@ECHO OFF\n")
        counter=0
        totalInput=""
        counter=0
        for arg in sys.argv:
            if counter > 1:
                totalInput+= arg + " "
            counter+=1

        if totalInput.find(".exe")!=-1:
            file.write("\"")

        counter=0

        for arg in sys.argv:
            if counter > 1:
                file.write(arg)
                if sys.argv[1]==sys.argv[2]:
                    if counter==2:
                        file.write(".exe")
                temparg=str(arg)
                if temparg.find(".exe")!=-1:
                    file.write("\"")
                file.write(" ")
            counter+=1
        file.write("%*")

        print "Aliased " + sys.argv[1] + " to " + totalInput
    else:
        if len(sys.argv)>2:
            listSome(sys.argv[2])
        else:
            listAll()
else:
    listAll()

Je vous prie de m'excuser pour la pauvreté du script, mais l'utilisation est plutôt agréable, je pense. Placez-le quelque part dans votre chemin, ajoutez .py à votre PATHEXT, et ajoutez c : \aliases à votre PATH aussi (ou changez-le, selon ce qui convient), puis utilisez :

alias <command> <action>

pour alias (Yep, pas de =, bien qu'il ne serait pas difficile d'ajouter un .split là-dedans), et :

alias -p <command or part of>

Pour montrer ce qu'est une chose.

Hackish, mais stupidement utile. Il existe un unalias équivalent script, mais je suis sûr que vous pouvez vous en sortir.

edit : Ceci nécessite évidemment Python, écrit sur la v26 mais fonctionnera probablement dans toute version récente. Comme précédemment, désolé pour la qualité :)

edit2 : En fait, quelque chose comme ça mais à ajouter au truc doskey serait mieux. Vous pouvez ajouter des commandes de démarrage à cmd avec la clé de registre autorun, aussi, donc cela pourrait être beaucoup plus propre.

0voto

programmer365 Points 1

Les fichiers batch prennent en charge une syntaxe de création de macro. Vous pouvez simplement déclarer les macros comme des variables, et leur passer des arguments comme des fonctions.

Les macros sont un peu difficiles à écrire, mais elles peuvent être plus puissantes, plus rapides et plus efficaces que les systèmes d'information. DOSKEY basé sur des macros.

Vos trois exemples peuvent être réalisés avec des macros, mais la syntaxe sera différente sous Windows.

Pour les macros persistantes, vous pouvez créer un fichier MACROS.cmd avec des macros, et l'appeler dans votre script ou l'ajouter à la clé de registre AutoRun (comme @user29888 l'a dit).

Comment faire : Créer des macros pour le fichier Batch

Une macro vous permet d'intégrer des blocs de code dans une variable. Comme l'appel d'une sous-routine ou d'une fonction, cela permet de réutiliser le même bloc de code plusieurs fois, à la différence qu'en plaçant le code dans une variable, les performances seront beaucoup plus rapides.

Il s'agit d'une technique avancée mais qui peut être très utile dans les scripts qui comprennent de grands blocs de code ou des commandes en boucle où les performances des autres méthodes sont trop lentes.

Une macro qui exécute exit /b

set _ex=exit /b

Vous pouvez alors quitter une sous-routine avec :

%_ex%

Une macro qui répertorie tous les fichiers .XLS d'un dossier :

Set _macro=Dir c:\demo\*.xls Nous pouvons maintenant exécuter la macro comme ceci : %_macro% Une macro pour autoriser les commentaires dans les blocs de code entre crochets [source] :

Set "[=rem/||(" & set "]=)"

For %%G in (first second) do (
   Echo first not commented line of the %%G execution
   %[%
       this is a multi line
       comment
   %]%
   Echo second not commented line of the %%G execution
)

Jusqu'ici, c'est comme la commande DOSKEY, mais pour rendre cette commande plus puissante, vous voudrez passer des arguments à la macro, dans l'exemple ci-dessus, vous voudrez peut-être passer le nom du dossier à lister.

Le passage d'arguments à une macro n'est pas particulièrement facile, la meilleure méthode (découverte par Jeb) est de placer une commande For /L dans la macro, configurée pour exécuter 2 étapes à chaque fois que la macro est exécutée :

Dans la première étape, les arguments sont stockés dans une variable (argv)

Dans la deuxième étape, le corps principal de la macro s'exécute et peut (facultativement) lire la variable

La structure de base de la définition de la macro :

Set _macro=For /l %%n in (1 1 2) do if %%n==2 (Echo Main MACRO goes here.) else setlocal enableDelayedExpansion ^& Set argv=, 

%_macro% arg1 arg2

:: The macro will expand to:
:: for /l %%n in (1 1 2) do if %%n==2 (Echo Main MACRO goes here.) else setlocal enableDelayedExpansion & Set argv=, arg1 arg2

:: which is equivalent to:
::    setlocal enableDelayedExpansion
::    Set argv= arg1 arg2
::    Echo Main MACRO goes here.

Exemples :

@echo off
cls
setlocal DisableDelayedExpansion
set LF=^

::Above 2 blank lines are required - do not remove
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"

set _macrodemo=for /L %%n in (1 1 2) do if %%n==2 (%\n%
     for /F "tokens=1 delims=, " %%G in ("!argv!") do (%\n%
        echo _argument1=%%G %\n%
        set "_argument1=!%%~G!"%\n%
        dir !_argument1!\*.xls%\n%
     ) %\n%
) ELSE setlocal enableDelayedExpansion ^& set argv=,

set "_testfolder=c:\demo"
%_macrodemo% _testfolder

Dans une macro où plus d'un argument doit être passé, ceux-ci deviendront les jetons 2,3,4... dans la commande FOR / F.

Une bibliothèque de macros peut être définie en exécutant un seul fichier batch MACROS.CMD, ce qui permet d'utiliser les macros de la bibliothèque dans plusieurs fichiers batch.

Source : https://ss64.com/nt/syntax-macros.html

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X