Jakie specjalne zmienne są dostępne podczas pisania polecenia powłoki dla menu kontekstowego

46

Podczas rozszerzania menu kontekstowego powłoki systemu Windows (np. W celu dodania do katalogów monitu „Otwórz tutaj polecenie”) należy utworzyć w rejestrze klucz „polecenie”.

Wartość tego klawisza „polecenia” najwyraźniej może być dowolną prawidłową linią poleceń.

Chcę wiedzieć, które „zmienne specjalne” są dostępne do użycia w tym wierszu poleceń.

Na przykład używam następującego polecenia do otwierania okna cmd z menu kontekstowego katalogu (*):

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

Nie mogę znaleźć żadnego odniesienia do tego, co %Vtak naprawdę oznacza lub jaka jest pełna lista takich zmiennych.


(*) W tym celu tworzone są następujące klucze rejestru:

[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
źródło

Odpowiedzi:

58

Komentarz Chrisa Guzaka na temat rozszerzania menu skrótów Artykuł MSDN wymienia różne „zmienne wiersza poleceń”, które są dostępne:

% * - Zamień na wszystkie parametry.

% ~ - Zamień na wszystkie parametry zaczynające się i następujące po drugim parametrze.

% 0 lub% 1 - pierwszy parametr pliku. Na przykład „C: \ Users \ Eric \ Desktop \ New Text Document.txt”. Zasadniczo powinno to być w cudzysłowach, a parsowanie wiersza poleceń aplikacji powinno akceptować cudzysłowy w celu ujednolicenia plików ze spacjami w nazwie i różnymi parametrami wiersza poleceń (jest to najlepsza praktyka bezpieczeństwa i, jak sądzę, wspomniana w MSDN).

% <n> (gdzie <n> to 2-9) - Zamień na n- ty parametr.

% s - Pokaż polecenie.

% h - wartość skrótu.

Tutaj przekazywany jest% i - IDList przechowywany w dojściu do pamięci współużytkowanej.

% l - Długa nazwa pliku pierwszego parametru. Zauważ, że aplikacje Win32 / 64 otrzymają długą nazwę pliku, podczas gdy aplikacje Win16 otrzymają krótką nazwę pliku. Określenie% l jest preferowane, ponieważ pozwala uniknąć potrzeby badania typu aplikacji.

% d - Bezwzględna nazwa parsowania pulpitu pierwszego parametru (dla elementów, które nie mają ścieżek systemu plików).

% v - Dla czasowników, które nie są żadnymi, oznacza wszystko. Jeśli nie przekazano żadnego parametru, jest to katalog roboczy.

% w - katalog roboczy.

Zatem% L lub% l powinno być preferowane.

Zobacz także http://www.robvanderwoude.com/ntstart.php

juze
źródło
18
Nie rozumiem, co należy rozumieć przez „Dla czasowników, które nie istnieją, implikuje wszystko”.
Pułkownik Panic
2
Ostrzeżenie o %W: Nie zawsze jest dostępne i spowoduje wyświetlenie tajemniczego komunikatu o błędzie, jeśli zostanie użyty w twojej commandwartości. Na przykład wywołanie elementu menu kontekstowego w menu kontekstowym dysku lub folderu biblioteki nie zainicjuje tej zmiennej. Unikaj jego używania poza pozycją menu kontekstowego procedury obsługi plików.
samthecodingman
Czy ktoś próbował %~? Dostaję tylko błąd.
cdlvcdlv
2
%Vnależy użyć, jeśli chcesz nazwę katalogu, tj. gdy chcesz dodać polecenie do menu kontekstowego po kliknięciu tła, a nie pojedynczego pliku lub nazwy katalogu. %Lnie zadziała w takim przypadku.
EnterTheNameHere Bohemian
11

To pytanie mnie zaintrygowało, więc zacząłem eksperymentować. Mam folder C:\iso. Co znalazłem po kliknięciu prawym przyciskiem myszy:

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

Izwracał inny zestaw liczb przy każdej próbie. Hzawsze 0 i Sbył zawsze 1. D, Li Vwszystkie były folder docelowy. Wbył rodzicem folderu docelowego. Czy ktoś ma zamiar to rozwinąć?

Do Twojej wiadomości: Użyłem następujących wpisów rejestru do przetestowania:

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

(Znaki `zostały użyte jako ograniczniki)

BillP3rd
źródło
3
Czy prawym przyciskiem myszy w folderze lub na folderze?
Pułkownik Panic
1

Naprawdę trudno jest znaleźć znaczenie% V lub listę tych zmiennych. Za pomocą Google odkryłem, że istnieje również% L. Nie sądzę, że musisz przekazać więcej niż% V lub% L do monitu, ponieważ myślę, że nie ma innych użytecznych informacji. Gdzie% V może być nazwą katalogu,% L może być lokalizacją pliku. Wykonanie „echa” może pomóc w razie wątpliwości ...

Tamara Wijsman
źródło