Exécution automatique de commandes à l'ouverture d'une invite de commandes

21

Je cherche un moyen d'exécuter automatiquement certaines commandes de la console lorsqu'une invite de commande est ouverte dans Windows, en particulier pour définir certains alias de commande.

Par exemple, lorsqu'une invite de commande est ouverte, je souhaite qu'une commande telle que la suivante soit exécutée automatiquement afin que je puisse l'utiliser à la lsplace de dir.

doskey ls=dir

Comment cela peut-il être fait?

Daniel Williams
la source
3
Windows XP n'a pas DOS.
user1686
@KContreau, interessant. Ce serait donc la raison pour laquelle mes lots ne sauvegardent pas les substitutions doskey après une commande "start / distinct", mais uniquement avec "cmd / k" ou "cmd / c" ...
kokbira
devons-nous changer le titre de la question ou non après l'édition "Clarification"?
kokbira
1
@KCotreau: Techniquement, cela fait partie du sous-système de la console Win32, non spécifique à cmd.exe.
user1686

Réponses:

9

Si vous voulez qu'il se charge au démarrage, plutôt que lorsque vous vous connectez, si vous avez XP Pro (XP home n'inclut pas gpedit.msc), procédez comme suit:

Démarrer> Exécuter> gpedit.msc

et appuyez sur Entrée. Exécutez ensuite gpupdate / force à partir d'une ligne de commande.

Aller à

Configuration ordinateur> Paramètres Windows> Scripts> Démarrage

et ajoutez l'emplacement au script.

Vous pouvez également le faire pour une connexion utilisateur sous

Configuration utilisateur> Paramètres Windows> Scripts> Démarrage

Si vous avez XP Home, vous pouvez copier les scripts dans:

C: \ Windows \ System32 \ GroupPolicy \ Machine \ Scripts \ Startup

pour les charger au démarrage, ou:

C: \ Windows \ System32 \ GroupPolicy \ User \ Scripts \ Logon

pour les charger pour un utilisateur lors de la connexion. Le dossier GroupPolicy est masqué.

KCotreau
la source
1
Je préférerais cette méthode à la mettre dans le dossier de démarrage. Le rend plus permanent.
Joe Taylor
1
@Joe Taylor Merci. Pour être honnête, j'utilise uniquement le dossier de démarrage pour des choses comme le démarrage d'Outlook. C'est une façon plus standard de le faire du point de vue de l'administration du système.
KCotreau
@KContreau, votre solution est très utile, mais pas pour ce cas. J'ai testé mais il ne fonctionnait pas pour la commande de substitution doskey ...
kokbira
@kokbira La question initiale était simplement "Comment exécuter un script au démarrage sous XP?", à laquelle je pense avoir répondu avec précision. Il a édité et ajouté la partie "par exemple, et doskey ls = dir" après.
KCotreau
1
@KContreau, vous avez raison, le problème est que le titre de cette question n'est pas correct. Dans "Clarification", il a dit qu'il voulait "exécuter des commandes DOS lorsque je lance une invite DOS, principalement pour définir des alias ". Pour exécuter certaines commandes au démarrage de Windows, votre solution est correcte, mais pour exécuter des alias, elle ne l'est pas.
kokbira
47

Les alias de commande sont spécifiques à la fenêtre de console sur laquelle vous les configurez, donc un script de démarrage ne fonctionnera pas. Vous pouvez le faire de cette façon:

  1. Créez un fichier batch ( .cmd) avec vos commandes doskey , placez-le quelque part dans Application Data.

  2. Configurez-le pour qu'il démarre automatiquement chaque fois que vous ouvrez cmd . Le paramètre est dans le Registre:

    • clé: HKCU\SOFTWARE\Microsoft\Command Processor
    • valeur: AutoRun
    • type: REG_EXPAND_SZ
    • Les données: "%AppData%\aliases.cmd"
user1686
la source
1
C'était une excellente solution pour un OS virtuel Win2K où je voulais que l'invite de commande charge toujours mes chemins de compilation. La seule différence était l'utilisation de REG_SZ au lieu de REG_EXPAND_SZ
James
C'est une bonne solution. Par hasard, existe-t-il un moyen de supprimer la sortie initiale?
nburr
1
@Nickolas: redirigez simplement les commandes vers NUL comme toujours?
user1686
Cela fonctionne à merveille CEPENDANT, il peut interférer avec le compilateur de ressources Windows (rc.exe) provoquant des erreurs telles que "Le système ne peut pas trouver le chemin spécifié." Voir Visual Studio Shell projet isolé ne compile pas .
User5910
J'ai résolu ce if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
problème
4

Différents interprètes de commandes gèrent les alias de commandes de différentes manières.

Le CMD de Microsoft s'appuie sur le sous-système de console Win32 pour fournir son mécanisme d'alias de commande. La doskeycommande interagit réellement avec la console du processus, et c'est la console elle-même qui contient les alias. Ainsi, les alias sont par console et transitoires.

Le TCC / LE de JP Software gère lui-même les alias. La aliascommande permet de visualiser et de manipuler des alias, qui sont soit "locaux" soit "globaux". Les alias sont encore transitoires, mais sont soit privés pour un processus d'interpréteur de commandes, soit partagés entre tous les processus d'interpréteur de commandes (sur toutes les consoles).

Des shells tels que le shell Korn dans la boîte à outils de l'utilitaire SFUA - dont les outils s'exécutent dans le sous - système pour les applications UNIX fourni directement dans la boîte avec l'édition Windows 7 Ultimate et Windows Server 2008 R2 (pour Windows XP, on peut télécharger et installer Services pour UNIX version 3.5 .) - et le shell Bourne Again de cygwin gèrent eux-mêmes les alias. Les alias sont transitoires et par processus d'interpréteur de commandes.

Le chargement automatique d'un ensemble initial d'alias par défaut varie également selon l'interpréteur de commandes.

Dans tous les cas, on place des commandes pour définir les alias dans un script quelconque.

grawitya déjà donné l'une des deux clés de registre qui font que CMD de Microsoft exécute une commande au démarrage . Malheureusement, c'est par processus d'interpréteur de commandes, même si les alias eux-mêmes sont stockés par console . Démarrez un interpréteur de commandes secondaire à partir de celui initial et toutes les modifications manuelles apportées aux alias par défaut seront réinitialisées. Une alternative, qui n'initialise au moins qu'une seule fois par console, consiste à ajouter l' /Koption et le nom d'un script de commande qui appelle doskeyla queue de commande dans le raccourci qui démarre l'interpréteur de commandes.

TCC / LE de JP Software exécute automatiquement le TCSTARTscript au démarrage. Encore une fois, c'est par processus d'interpréteur de commandes. Cependant, les alias "locaux" de TCC sont également par processus d'interpréteur de commandes, c'est donc le bon endroit pour initialiser les alias si l'on utilise des alias locaux. Pour les alias globaux, créez simplement un raccourci dans votre Startupdossier qui charge les alias à partir d'un fichier (avec alias /r), puis exécute la shraliascommande afin qu'ils persistent après la fin de l'exécution de ce raccourci.

Pour les obus Bourne Again et Korn, faites simplement comme vous le feriez avec ces obus sur n'importe quelle autre plate-forme. Utilisez la aliascommande dans les scripts $HOME/.profileet $HOME/.bashrcpour le shell Bourne Again; et utilisez la aliascommande dans $HOME/.profile, ENV et les $HOME/.kshrcscripts pour le shell Korn.

JdeBP
la source
2

La réponse de Gravity a très bien fonctionné pour moi.

J'ai créé un script shell-aliases.cmd dans mon dossier Documents (quelque part je peux le trouver plus tard).

Puis créé la valeur de chaîne extensible 'AutoRun' dans la clé de registre:

'HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor'

Définissez la valeur sur le chemin d'accès complet au fichier d'alias (le mien se trouvait dans «C: \ Users \ Lee \ Documents \ shell-aliases.cmd»).

Une fois que j'ai rechargé l'invite de commande, mes alias doskey ont fonctionné. De plus, mon fichier d'alias est facilement accessible et prêt à être édité car je pense à plus à ajouter.

lee8oi
la source
0

Il y a plusieurs emplacements qui feront l'affaire, mais le menu Démarrer> dossier de démarrage est probablement le plus simple.

Exécutez «msconfig» et voyez quels programmes démarrent et pourquoi. Vous pouvez simplement ajouter votre programme à l'une de ces listes (par exemple, dans le registre).

Konerak
la source
0

Le problème ici est que si vous le faites au démarrage, ces substitutions ne seront disponibles que dans l'invite CMD ouverte. S'il se ferme, toutes ces substitutions seront perdues et doivent être effectuées à nouveau pour chaque invite de commande ouverte.

Donc, quelques façons alternatives (vous pouvez les combiner):

I. Créez un lot et un raccourci:

  1. Créez un lot avec ces macros et enregistrez-le dans un endroit connu (par exemple c: \ apps \ mycmd.bat).
  2. Créez un raccourci vers celui-ci dans le bureau (ou où vous voulez) en plaçant "cmd / k" avant son chemin (par exemple "cmd /kc:\apps\mycmd.bat").
  3. Ainsi, toutes vos commandes seront exécutées chaque fois que vous ouvrirez ce raccourci.

II. Créez un lot et une entrée dans la variable d'environnement PATH:

  1. Créez un lot avec ces macros et enregistrez-le dans un endroit connu (par exemple c: \ apps \ mycmd.bat).
  2. Accédez à Panneau de configuration> Système> Configurations avancées> Avancé> Variables d'environnement.
  3. Dans les entrées utilisateur ou système, recherchez une variable nommée PATH. Double-cliquez dessus et, à la fin, insérez ";" et le chemin vers votre BAT (par exemple "c: \ apps \" => "chaîne_précédente; c: \ apps \"), puis Ok et Ok.
  4. Ainsi, lorsque vous utilisez une cmd (ou dans un fichier BAT), il suffit de mettre le nom d'une BAT dans le chemin créé (par exemple "c: \ apps") pour exécuter vos commandes (par exemple, tapez "myapps" pour exécuter ces commandes de substitution).
kokbira
la source
1
J'ai essayé "démarrer / séparer" mais il enregistre uniquement la variable d'environnement (pas les substitutions de la commande doskey) ... La commande "set" est également valide uniquement pour l'invite ouverte, mais nous pouvons utiliser "setx" pour l'enregistrer dans le système ou variables d'environnement utilisateur "pour toujours". Je ne sais pas s'il existe un moyen d'enregistrer les substitutions de doskey "pour toujours" sur le système ou à chaque démarrage de Windows. Je préfère utiliser mes moyens ...
kokbira