Welche speziellen Variablen sind beim Schreiben eines Shell-Befehls für ein Kontextmenü verfügbar?


46

Beim Erweitern des Windows-Shell-Kontextmenüs (z. B. zum Hinzufügen einer Eingabeaufforderung zum Öffnen von Verzeichnissen) muss ein Befehlsschlüssel in der Registrierung erstellt werden.

Der Wert dieser 'Befehls'-Taste kann anscheinend eine beliebige gültige Befehlszeile sein.

Ich möchte wissen, welche speziellen Variablen in dieser Befehlszeile verwendet werden können.

Ich verwende beispielsweise den folgenden Befehl zum Öffnen eines Cmd-Fensters aus dem Kontextmenü eines Verzeichnisses (*):

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

Ich kann keinen Hinweis darauf finden, was %Veigentlich bedeutet oder wie die vollständige Liste solcher Variablen aussieht.


(*) Folgende Registrierungsschlüssel werden dafür erstellt:

[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\""

Antworten:


58

Ein Kommentar von Chris Guzak zum MSDN-Artikel " Extending Shortcut Menus" listet die verschiedenen verfügbaren "Befehlszeilenvariablen" auf:

% * - Durch alle Parameter ersetzen.

% ~ - Durch alle Parameter ersetzen, die mit dem zweiten Parameter beginnen und auf diesen folgen.

% 0 oder% 1 - Der erste Dateiparameter. Zum Beispiel "C: \ Users \ Eric \ Desktop \ New Text Document.txt". Im Allgemeinen sollte dies in Anführungszeichen stehen und die Befehlszeilenanalyse der Anwendungen sollte Anführungszeichen akzeptieren, um Dateien mit Leerzeichen im Namen und verschiedenen Befehlszeilenparametern zu disambiguieren (dies ist eine bewährte Sicherheitsmethode, die meines Erachtens in MSDN erwähnt wird).

% <n> (wobei <n> 2-9 ist) - Ersetzen Sie durch den n- ten Parameter.

% s - Befehl anzeigen.

% h - Hotkey-Wert.

% i - IDList, die in einem Handle für gemeinsam genutzten Speicher gespeichert ist, wird hier übergeben.

% l - Lange Dateinamenform des ersten Parameters. Beachten Sie, dass Win32 / 64-Anwendungen den langen Dateinamen übergeben werden, während Win16-Anwendungen den kurzen Dateinamen erhalten. Die Angabe von% l wird bevorzugt, da keine Prüfung für den Anwendungstyp erforderlich ist.

% d - Absoluter Parsing-Name für Desktop des ersten Parameters (für Elemente ohne Dateisystempfade).

% v - Für Verben, die keine sind, bedeutet dies alles. Wenn kein Parameter übergeben wird, ist dies das Arbeitsverzeichnis.

% w - Das Arbeitsverzeichnis.

Daher sollten% L oder% l bevorzugt werden.

Siehe auch http://www.robvanderwoude.com/ntstart.php


18
Ich verstehe nicht, was mit "Für Verben, die keine sind, bedeutet alles" gemeint ist.
Colonel Panic

2
Eine Warnung zu %W: Sie ist nicht immer verfügbar und gibt eine kryptische Fehlermeldung aus, wenn sie in Ihrem commandWert verwendet wird. Wenn Sie beispielsweise Ihr Kontextmenüelement im Kontextmenü eines Laufwerks oder eines Bibliotheksordners aufrufen, wird diese Variable nicht initialisiert. Vermeiden Sie die Verwendung außerhalb des Kontextmenüeintrags eines Datei-Handlers.
Samthecodingman

Hat jemand versucht %~? Ich bekomme nur einen Fehler.
cdlvcdlv

2
%Vsollte verwendet werden, wenn Sie Verzeichnisnamen möchten, dh. wenn Sie Ihren Befehl im Kontextmenü hinzufügen möchten, wenn Sie auf den Hintergrund klicken, nicht auf eine einzelne Datei oder einen Verzeichnisnamen. %Lwird in diesem Fall nicht funktionieren.
EnterTheNameHere Bohemian

11

Diese Frage hat mich fasziniert, also habe ich experimentiert. Ich habe einen Ordner C:\iso. Was ich gefunden habe, als ich mit der rechten Maustaste geklickt habe:

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

Igab bei jedem Versuch einen anderen Satz von Zahlen zurück. Hwar immer 0 und Swar immer 1 D, Lund Vwaren alle Zielordner. Wwar das übergeordnete Element des Zielordners. Möchte jemand dies erweitern?

Zu Ihrer Information: Ich habe die folgenden Registrierungseinträge zum Testen verwendet:

[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\""

(Die `Zeichen wurden als Trennzeichen verwendet)


3
Haben Sie mit der rechten Maustaste in den Ordner oder auf den Ordner geklickt?
Colonel Panic


1

Es ist in der Tat schwer zu finden, was% V bedeutet, oder eine Liste dieser Variablen. Durch Google habe ich herausgefunden, dass es anscheinend auch% L gibt. Ich glaube nicht, dass Sie mehr als% V oder% L an eine Eingabeaufforderung übergeben müssen, da es meiner Meinung nach keine weiteren nützlichen Informationen gibt. Wobei% V der Verzeichnisname sein könnte,% L könnte ein Speicherort für eine Datei sein. Im Zweifelsfall kann ein Echo helfen ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.