Quali variabili speciali sono disponibili quando si scrive un comando shell per un menu di scelta rapida


46

Quando si estende il menu di scelta rapida della shell di Windows (ad es. Per l'aggiunta di un prompt "Apri comando qui" nelle directory), è necessario creare una chiave "comando" nel registro.

Il valore di questa chiave 'comando' apparentemente può essere qualsiasi riga di comando valida.

Voglio sapere quali "variabili speciali" sono disponibili per l'uso all'interno di questa riga di comando.

Ad esempio, utilizzo il seguente comando per aprire una finestra cmd dal menu contestuale di una directory (*):

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

Non riesco a trovare alcun riferimento a cosa %Vsignifichi effettivamente o quale sia l'elenco completo di tali variabili.


(*) A questo scopo vengono create le seguenti chiavi di registro:

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

Risposte:


58

Un commento di Chris Guzak sull'articolo MSDN dei menu di scelta rapida di estensione elenca le varie "variabili della riga di comando" disponibili:

% * - Sostituisci con tutti i parametri.

% ~ - Sostituisci con tutti i parametri che iniziano e seguono il secondo parametro.

% 0 o% 1 - Il primo parametro del file. Ad esempio "C: \ Users \ Eric \ Desktop \ New Text Document.txt". Generalmente questo dovrebbe essere tra virgolette e l'analisi della riga di comando delle applicazioni dovrebbe accettare le virgolette per disambiguare i file con spazi nel nome e diversi parametri della riga di comando (questa è una best practice sulla sicurezza e credo che sia menzionata in MSDN).

% <n> (dove <n> è 2-9) - Sostituisci con l' ennesimo parametro.

% s - Mostra il comando.

% h - Valore tasto di scelta rapida.

% i - IDList memorizzato in un handle di memoria condivisa viene passato qui.

% l - Forma del nome file lungo del primo parametro. Si noti che alle applicazioni Win32 / 64 verrà passato il nome file lungo, mentre le applicazioni Win16 ottengono il nome file breve. È preferibile specificare% l poiché evita la necessità di sondare il tipo di applicazione.

% d - Nome di analisi assoluto desktop del primo parametro (per elementi che non hanno percorsi di file system).

% v - Per i verbi che non sono nessuno implica tutto. Se non viene passato alcun parametro, questa è la directory di lavoro.

% w - La directory di lavoro.

Quindi dovrebbe essere preferito% L o% l.

Vedi anche http://www.robvanderwoude.com/ntstart.php


18
Non capisco cosa si intende per "Per i verbi che non sono nessuno implica tutto".
Colonnello Panic,

2
Un avvertimento su %W: non è sempre disponibile e genererà un messaggio di errore criptico se utilizzato nel tuo commandvalore. Ad esempio, chiamando la voce del menu di scelta rapida sul menu di scelta rapida di un'unità o di una cartella della libreria non verrà inizializzata questa variabile. Evita il suo utilizzo al di fuori della voce del menu contestuale del gestore file.
samthecodingman,

Qualcuno ha provato %~? Ricevo solo un errore.
cdlvcdlv,

2
%Vdovrebbe essere usato se si desidera il nome della directory, ad es. quando si desidera aggiungere il comando al menu di scelta rapida quando si fa clic sullo sfondo, non su un singolo file o su un nome di directory. %Lnon funzionerà in quel caso.
EnterTheNameHere Bohemian

11

Questa domanda mi ha incuriosito, quindi ho fatto alcuni esperimenti. Ho una cartella C:\iso. Quello che ho trovato quando ho fatto la cosa del tasto destro:

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

Irestituito un diverso set di numeri ad ogni tentativo. Hera sempre 0 e Sera sempre 1. D, Le Vsono stati tutti la cartella di destinazione. Wera il genitore della cartella di destinazione. Qualcuno ha intenzione di espandersi su questo?

Cordiali saluti: Ho usato le seguenti voci di registro per testare:

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

(I caratteri `sono stati usati per i delimitatori)


3
Hai fatto clic con il pulsante destro del mouse sulla cartella o sulla cartella?
Colonnello Panic,


1

È davvero difficile trovare cosa significhi% V o un elenco di tali variabili, tramite Google ho scoperto che sembra esistere anche un% L. Non credo che devi passare più di% V o% L a un prompt, poiché non ci sono altre informazioni utili che penso. Dove% V potrebbe essere il nome della directory,% L potrebbe essere la posizione di un file. Fare un 'eco' potrebbe aiutare in caso di dubbio ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.