web-dev-qa-db-fra.com

Quelles variables spéciales sont disponibles lors de l'écriture d'une commande Shell pour un menu contextuel

Lors de l’extension du menu contextuel du shell de Windows (par exemple, pour l’ajout d’une invite de commande "Ouvrir ici" dans les répertoires), une clé de "commande" doit être créée dans le registre.

La valeur de cette touche 'commande' peut apparemment être une ligne de commande valide.

Je veux savoir quelles "variables spéciales" peuvent être utilisées dans cette ligne de commande.

Par exemple, j'utilise la commande suivante pour ouvrir une fenêtre de commande depuis un menu contextuel d'un répertoire (*):

cmd.exe /e:on /f:on /s /k pushd "%V"

Je ne trouve aucune référence à ce que% V signifie réellement ou à la liste complète de ces variables.


(*) Les clés de registre suivantes sont créées pour cela: [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Shell\cmdshell] @ = Ouvrir l'invite de commande ici "

HKEY_LOCAL_MACHINE\LOGICIEL\Classes\Répertoire\Shell\cmdshell\command] @ = "cmd.exe/e: sur/f: sur/s/k pushd \"% V\""

43
Gio

Un commentaire de Chris Guzak sur le extension des menus de raccourcis L'article de MSDN répertorie les différentes "variables de ligne de commande" disponibles:

% * - Remplacer par tous les paramètres.

% ~ - Remplacez par tous les paramètres commençant par et suivant le deuxième paramètre.

% 0 ou% 1 - Le premier paramètre de fichier. Par exemple, "C:\Utilisateurs\Eric\Bureau\Nouveau document texte.txt". Généralement, cela devrait être entre guillemets et l'analyse de la ligne de commande des applications devrait accepter les guillemets afin de lever toute ambiguïté des fichiers avec des espaces dans le nom et des paramètres de ligne de commande différents (il s'agit d'une meilleure pratique de sécurité et, je crois, mentionnée dans MSDN).

% <n> (où <n> est compris entre 2 et 9) - à remplacer par le nth paramètre.

% s - Afficher la commande.

% h - Valeur du raccourci clavier.

% i - La liste IDList stockée dans un descripteur de mémoire partagée est transmise ici.

% l - Forme de nom de fichier long du premier paramètre. Notez que le nom de fichier long sera attribué aux applications Win32/64, tandis que le nom de fichier court sera attribué aux applications Win16. Spécifier% l est préférable car cela évite d'avoir à rechercher le type d'application.

% d - Nom absolu du premier paramètre d'analyse de poste de travail (pour les éléments sans chemin d'accès au système de fichiers).

% v - Pour les verbes inexistants, cela signifie tout. Si aucun paramètre n'est transmis, c'est le répertoire de travail.

% w - Le répertoire de travail.

Donc,% L ou% l devrait être préféré.

Voir aussi http://www.robvanderwoude.com/ntstart.php

52
juze

Cette question m'a intriguée alors j'ai fait quelques expériences. J'ai un dossier C:\iso. Ce que j'ai trouvé en faisant un clic droit:

D = C:\iso
H = 0
I = :115057472:7932
L = C:\iso
S = 1
V = C:\iso
W = C:\

Ia renvoyé un ensemble de nombres différent à chaque tentative. Ha toujours été 0 et Sa toujours été 1. Dname__, Let Vétaient tous le dossier cible. Wétait le parent du dossier cible. Quelqu'un veut-il développer?

FYI: J'ai utilisé les entrées de registre suivantes pour tester:

[HKEY_CLASSES_ROOT\Directory\Shell\testcmd]
@="Test Command Window Directory"
[HKEY_CLASSES_ROOT\Directory\Shell\testcmd\command]
@="cmd.exe /k \"echo %A`%B`%C`%D`%E`%F`%G`%H`%I`%J`%K`%L`%M`%N`%O`%P`%Q`%R`%S`%T`%U`%V`%W`%X`%Y`%Z\""

(Les `caractères ont été utilisés pour les délimiteurs)

10
BillP3rd

Voici les arguments/syntaxe pour cmd.exe

/k exécute la commande spécifiée par la chaîne suivante afin d'exécuter la commande pushd %V et puisque le seul l'argument pushd accepte est un chemin, il s'ensuit que %V est une variable remise par Explorer contenant le chemin du dossier right cliqué.

3
Nifle

Il est en effet difficile de trouver ce que% V signifie ou une liste de ces variables, grâce à Google, j’ai trouvé qu’il semblait exister un% L aussi. Je ne pense pas que vous deviez passer plus de% V ou% L à une invite, car il n'y a pas d'autres informations utiles, je pense. Où% V pourrait être le nom du répertoire,% L pourrait être un emplacement dans un fichier. Faire un "écho" pourrait aider en cas de doute ...

1
Tamara Wijsman