Windows: comment ajouter une action de script par lots au menu contextuel

18

J'ai quelques programmes qui créent des fichiers temporaires ou des fichiers de sauvegarde ou des fichiers similaires qui ne sont pas importants. Par exemple, GVim pour Windows crée par défaut un fichier de sauvegarde dans filename.txt~.

J'ai parfois besoin de nettoyer un répertoire et de supprimer tous ces fichiers. J'ai créé un simple fichier .bat pour cela. Cependant, il est fastidieux de devoir démarrer CMD, d'accéder au dossier, d'exécuter le script. D'autant plus qu'il s'agit d'un script que j'aimerais exécuter souvent sur différents dossiers. Et je ne veux pas copier le script dans plusieurs dossiers, car ce serait un cauchemar de maintenance.

Donc, je pensais que la meilleure solution serait d'ajouter un élément de menu clic droit qui me permet d'exécuter le script. Pour que je puisse faire un clic droit sur un dossier dans l'Explorateur et cliquer sur Nettoyage, puis faire exécuter mon script sur ce dossier.

Ma question est donc la suivante: comment ajouter une action de menu contextuel qui exécute un script batch personnalisé?

ervingsb
la source

Réponses:

18

J'ai essayé Windows XP SP3 avec cette clé .reg. Je n'ai pas Windows 7 pour le moment pour le tester correctement, mais il devrait être presque le même.

  1. Ouvrez le bloc-notes et collez le code ci-dessous.
  2. Modifiez selon vos besoins.
  3. Enregistrer en tant que MyScript1.reg
  4. Double-cliquez pour importer dans le registre.
  5. Test par clic droit sur n'importe quel répertoire dans l'Explorateur
Éditeur de registre Windows version 5.00

[HKEY_CLASSES_ROOT \ Directory \ shell \ MyScript1]
@ = "Exécuter MyScript1"

[HKEY_CLASSES_ROOT \ Directory \ shell \ MyScript1 \ command]
@ = "\" C: \\ MyScriptsDirectory \\ MyScript1Directory \\ MyScript1.bat \ "\"% 1 \ ""
Robert Schmidt
la source
4
J'ai un peu modifié ta réponse. «Windows Registry Editor Version 5.00» est un «en-tête» obligatoire pour les fichiers .reg. Sinon, Windows refusera d'injecter le contenu dans le registre.
extremko
+1 pour avoir signalé celui-ci. J'ai totalement oublié cela lorsque le code c / p.
Robert Schmidt
1
J'ai essayé ça. Maintenant, je peux faire un clic droit directement sur un dossier, mais cela ne fonctionne pas si je fais un clic droit dans un dossier. C'est en fait ce que je veux. Comment faire ça?
ervingsb
1
C'est une question différente de la "Pour que je puisse faire un clic droit sur un dossier dans l'Explorateur et cliquer sur Nettoyage et puis faire exécuter mon script sur ce dossier."
Robert Schmidt
Oui, c'est pourquoi je l'ai clarifié. Désolé d'être imprécis. En fait, je pense que c'est un clic droit sur le dossier. Ce n'est tout simplement pas l'icône du dossier, mais à l'intérieur du dossier.
ervingsb
19

En fait, la réponse actuelle n'est pas obsolète. J'ai essayé exactement la même chose sur Windows 10 et j'ai pu ajouter Run Batch scriptau menu contextuel de tous les dossiers de Windows.

Voici le contenu de mon script batch (ne fonctionnera pas avec les chemins UNC ):

@ÉCHO OFF
ECHO% ~ n0 a été appelé avec les arguments suivants:
SET args =% *
SI NON DÉFINI, args GOTO END
ÉCHO %*
:FIN
PAUSE

Les modifications de registre que j'ai apportées peuvent être répliquées avec ce fichier REG:

Éditeur de registre Windows version 5.00

[HKEY_CLASSES_ROOT \ Directory \ shell \ Run Batch script]
@ = "& Lancer le script batch"

[HKEY_CLASSES_ROOT \ Directory \ shell \ Run Batch script \ command]
@ = "\" H: \\ BATCH_FILE_PATH \\ context-batch.bat \ "\"% 1 \ ""

Cela ajoute uniquement un élément de menu contextuel pour tous les répertoires / dossiers de Windows. Si vous souhaitez qu'il s'affiche pour chaque fichier à la place, vous pouvez utiliser ceci:

Éditeur de registre Windows version 5.00

[HKEY_CLASSES_ROOT \ * \ shell \ Exécuter le script]
@ = "Exécuter & script"

[HKEY_CLASSES_ROOT \ * \ shell \ Exécuter le script \ commande]
@ = "\" H: \\ BATCH_FILE_PATH \\ context-batch.bat \ "\"% 1 \ ""

Alternativement, vous pouvez ajouter votre script de commandes à la Send Toliste des éléments en créant un raccourci vers votre script de commandes et en le plaçant sous %APPDATA%\Microsoft\Windows\SendTo(ou entrez shell:sendtodans la barre d'adresse)

Si vous souhaitez que votre script s'affiche dans le menu contextuel qui apparaît lorsque vous cliquez avec le bouton droit sur l'espace vide dans un répertoire (arrière-plan du répertoire?), Vous pouvez utiliser le fichier REG suivant:

Éditeur de registre Windows version 5.00

[HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ Run Batch script]
@ = "& Lancer le script batch"
"Icon" = "% SystemRoot% \\ System32 \\ shell32.dll, 71"

[HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ Run Batch script \ command]
@ = "H: \\ BATCH_FILE_PATH \\ context-batch.bat \"% V \ ""

Vous n'avez pas besoin de la "Icon"="%SystemRoot%\\System32\\shell32.dll,71"ligne. Il ajoute simplement une icône à votre menu contextuel qui ressemble à ceci:

fenêtres d'icônes du menu contextuel

Vinayak
la source
Merci! Soit dit en passant, savez-vous comment afficher ce menu contextuel lorsque je clique avec le bouton droit sur l'espace vide du dossier actuel (pas seulement lorsque je clique sur le dossier lui-même)?
Tom Brito
@TomBrito Veuillez voir ma dernière modification.
Vinayak
@Tom Brito: La modification du menu contextuel de l'espace vide semble avoir une réponse ici: stackoverflow.com/questions/4902041/…
kreemoweet
@kreemoweet Merci d'avoir lié ça! Cependant, j'ai découvert cela en analysant l' éditeur de menu contextuel .
Vinayak
@kreemoweet J'ai changé la chaîne de chemin d'accès pour l' Directory\Backgroundinclure %Vcar cela transmettrait le répertoire courant au script. Cependant, je ne sais pas vraiment ce que cela signifie. %Wsemble fonctionner aussi bien.
Vinayak
7

Je recommanderais l' éditeur de programmes par défaut pour cette tâche. Il est à la fois plus convivial et sans doute plus sûr que de modifier directement le registre.

Choisissez le menu contextuel entrez la description de l'image ici

Sélectionnez l'extension que vous souhaitez modifier. entrez la description de l'image ici

Choisissez Ajouter ... entrez la description de l'image ici

Donnez un titre à votre commande, accédez au fichier de commandes et choisissez éventuellement une icône pour représenter votre commande. entrez la description de l'image ici

Enregistrez le menu contextuel dans le registre et vous êtes prêt à partir.

Xtremity
la source
Je voudrais exécuter le lot sur des dossiers, pas sur un type de fichier. On dirait que ça n'aide pas ...
Tom Brito
Cela m'a aidé, merci pour le partage.
Daniel Kaplan
Bon programme. Merci.
Laurie Stearn du
0

La solution alternative que j'utilise sur Windows 10 consiste à ajouter un script à l'un des dossiers dans la variable de chemin, puis lorsque vous êtes dans l'explorateur, utilisez la séquence:

  • ctrl + L - pour commencer à écrire dans la barre de recherche

  • tapez: cmd, puis appuyez sur Entrée - pour démarrer cmd dans le répertoire courant

  • exécutez votre script, en tapant son nom de fichier

jabone
la source
0

@Vinayak,

Si vous utilisez l'option "envoyer à", vous devrez probablement ajouter la ligne cd /d %1au début de la commande par lots afin qu'elle s'exécute sous le chemin cible.

mon fichier de commandes actuel ressemble à ceci:

@echo off
cd /d %1    
del *.txt
pause

Merci pour l'aide, je suis tombé sur ça via google au bon moment :)

Chris
la source
C'est vraiment un commentaire et non une réponse à la question d'origine. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article - vous pouvez toujours commenter vos propres articles, et une fois que vous aurez une réputation suffisante, vous pourrez commenter n'importe quel article . Veuillez lire Pourquoi ai-je besoin de 50 points de réputation pour commenter? Que puis-je faire à la place?
DavidPostill
@DavidPostill bien, il n'avait pas de message à lui dans ce sujet pour commenter, avant de poster sa réponse .. Et (en supposant qu'il voulait dire quelque chose digne d'être un commentaire), que pouvait-il faire pour commenter? rien sans doute.
barlop du
@barlop Les réponses ne remplacent pas les commentaires comme vous le savez bien. Une alternative est de proposer une modification à l'autre réponse ... mais cela serait probablement rejeté.
DavidPostill
@DavidPostill mon point est simplement qu'il n'a alors aucune option. et vous n'êtes pas vraiment clair sur ce fait dans votre commentaire d'origine. En fait, votre commentaire original suggère l'idée qu'il a des options, mais il n'en a pas.
barlop
@barlop Ah. D'ACCORD. Je penserai à une meilleure formulation ...
DavidPostill