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

46

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

La valeur de cette touche 'commande' peut apparemment être n'importe quelle 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 %Vsignifie 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\""
Gio
la source

Réponses:

58

Un commentaire de Chris Guzak sur l' article MSDN des extensions de raccourcis étendus 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) - Remplacez-le par le nième 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

juze
la source
18
Je ne comprends pas ce que l'on entend par "Pour les verbes qui n'en sont aucun, cela signifie tout".
colonel Panic
2
Un avertissement à propos de %W: Il n'est pas toujours disponible et émettra un message d'erreur cryptique s'il est utilisé dans votre commandvaleur. Par exemple, l'appel de votre élément de menu contextuel sur le menu contextuel d'un lecteur ou d'un dossier de bibliothèque n'initialisera pas cette variable. Évitez son utilisation en dehors de l'entrée de menu contextuel d'un gestionnaire de fichiers.
samthecodingman
Quelqu'un a-t-il essayé %~? Je reçois seulement une erreur.
cdlvcdlv
2
%Vdevrait être utilisé si vous voulez le nom du répertoire, c'est à dire. lorsque vous souhaitez ajouter votre commande dans le menu contextuel lorsque vous cliquez sur l’arrière-plan, et non sur un seul fichier ou sur un nom de répertoire. %Lne fonctionnera pas dans ce cas.
EnterTheNameHere Bohemian
11

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:\

Iretourné un ensemble différent de nombres à chaque essai. Hétait toujours 0 et Sétait toujours 1. D, Let Vtout le reste du 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)

BillP3rd
la source
3
Avez-vous effectué un clic droit dans le dossier ou sur le dossier?
colonel Panic
1

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 aucune autre information utile, 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 ...

Tamara Wijsman
la source