71 votes

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 de Windows Shell (par exemple pour ajouter une invite 'Ouvrir une commande ici' sur les répertoires), une clé 'command' doit être créée dans le registre.

La valeur de cette clé "command" peut apparemment être n'importe quelle ligne de commande valide.

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

Par exemple, j'utilise la commande suivante pour ouvrir une fenêtre cmd à partir du 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 quelle est 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]
@=Open Command Prompt Here"

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell\command]
@="cmd.exe /e:on /f:on /s /k pushd \"%V\""

83voto

juze Points 746

Un commentaire de Chris Guzak sur le Extension des menus de raccourcis L'article de MSDN énumère les différentes "variables de ligne de commande" disponibles :

%* - Remplacer par tous les paramètres.

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

%0 ou %1 - Le premier paramètre du fichier. Par exemple, " C:\Users\Eric\Desktop\New Document texte.txt". En règle générale, ces données doivent être placées entre guillemets et l'analyse de la ligne de commande de l'application doit accepter les guillemets afin de distinguer les fichiers comportant des espaces dans le nom et les différents paramètres de la ligne de commande (il s'agit d'une bonne pratique en matière de sécurité, mentionnée dans MSDN, je crois).

%<n> (où <n> est 2-9) - Remplacer par le n th paramètre.

%s - Afficher la commande.

%h - Valeur de la touche de raccourci.

%i - L'IDList stockée dans un handle de mémoire partagée est passée ici.

%l - Forme longue du nom de fichier du premier paramètre. Notez que les applications Win32/64 recevront le nom de fichier long, tandis que les applications Win16 recevront le nom de fichier court. La spécification de %l est préférable car elle évite d'avoir à demander le type d'application.

%d - Nom d'analyse absolu du bureau du premier paramètre (pour les éléments qui n'ont pas de chemin d'accès au système de fichiers).

%v - Pour les verbes qui sont aucun implique tous. Si aucun paramètre n'est passé, c'est le répertoire de travail.

%w - Le répertoire de travail.

Il faut donc préférer %L ou %l.

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

18voto

BillP3rd Points 6027

Cette question m'a intrigué et j'ai donc fait quelques expériences. J'ai un dossier C:\iso . Ce que j'ai trouvé quand j'ai fait le clic droit :

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

I a retourné un ensemble différent de chiffres à chaque essai. H était toujours 0 et S a toujours été de 1. D , L y V étaient tous le dossier cible. W était le parent du dossier cible. Quelqu'un peut-il nous en dire plus ?

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 comme délimiteurs)

3voto

user2013 Points 2301

Voici les arguments/syntaxe pour cmd.exe

/k exécute la commande spécifiée par la chaîne suivante ; il exécute donc la commande pushd %V et puisque le seul argument que pushd accepte est un chemin, il s'ensuit que %V une variable fournie par l'explorateur qui contient le chemin du dossier sur lequel on a fait un clic droit.

3voto

Tamara Wijsman Points 56163

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

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