Qué variables especiales están disponibles al escribir un comando de shell para un menú contextual

46

Cuando se amplía el menú contextual del shell de Windows (por ejemplo, para agregar un mensaje 'Abrir comando aquí' en los directorios), se debe crear una clave 'comando' en el registro.

El valor de esta tecla 'comando' aparentemente puede ser cualquier línea de comando válida.

Quiero saber qué 'variables especiales' están disponibles para usar dentro de esta línea de comando.

Por ejemplo, uso el siguiente comando para abrir una ventana cmd desde el menú contextual de un directorio (*):

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

No puedo encontrar ninguna referencia a lo que %Vrealmente significa o cuál es la lista completa de tales variables.


(*) Se crean las siguientes claves de registro para esto:

[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
fuente

Respuestas:

58

Un comentario de Chris Guzak sobre el artículo MSDN de Menús de acceso directo extendido enumera las diversas "variables de línea de comandos" que están disponibles:

% * - Reemplazar con todos los parámetros.

% ~ - Reemplazar con todos los parámetros comenzando con y siguiendo el segundo parámetro.

% 0 o% 1: el primer parámetro de archivo. Por ejemplo, "C: \ Users \ Eric \ Desktop \ New Text Document.txt". En general, esto debe estar entre comillas y el análisis de la línea de comandos de las aplicaciones debe aceptar comillas para desambiguar archivos con espacios en el nombre y diferentes parámetros de la línea de comandos (esta es una práctica recomendada de seguridad y creo que se menciona en MSDN).

% <n> (donde <n> es 2-9) - Reemplace con el enésimo parámetro.

% s - Mostrar comando.

% h: valor de la tecla de acceso rápido.

% i - IDList almacenada en un identificador de memoria compartida se pasa aquí.

% l: forma de nombre de archivo largo del primer parámetro. Tenga en cuenta que las aplicaciones Win32 / 64 recibirán el nombre de archivo largo, mientras que las aplicaciones Win16 obtendrán el nombre de archivo corto. Se prefiere especificar% l ya que evita la necesidad de buscar el tipo de aplicación.

% d: nombre de análisis absoluto de escritorio del primer parámetro (para elementos que no tienen rutas del sistema de archivos).

% v - Para verbos que son ninguno implica todos. Si no se pasa ningún parámetro, este es el directorio de trabajo.

% w: el directorio de trabajo.

Por lo tanto, se debe preferir% L o% l.

Ver también http://www.robvanderwoude.com/ntstart.php

juze
fuente
18
No entiendo qué se entiende por "Para verbos que son ninguno implica todo".
Coronel Panic
2
Una advertencia sobre %W: No siempre está disponible y arrojará un mensaje de error críptico si se usa en su commandvalor. Por ejemplo, llamar a su elemento del menú contextual en el menú contextual de una unidad o carpeta de biblioteca no inicializará esta variable. Evite su uso fuera de la entrada del menú contextual de un controlador de archivos.
samthecodingman
¿Alguien lo ha intentado %~? Solo recibo un error.
cdlvcdlv
2
%Vdebe usarse si desea el nombre del directorio, es decir. cuando desee agregar su comando en el menú contextual cuando haga clic en el fondo, no en un solo archivo o nombre de directorio. %Lno funcionará en ese caso.
EnterTheNameHere Bohemian
11

Esta pregunta me intrigó, así que experimenté un poco. Tengo una carpeta C:\iso. Lo que encontré cuando hice el clic derecho:

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

Idevolvió un conjunto diferente de números en cada intento. Hsiempre fue 0 y Ssiempre fue 1 D. ,, Ly Vfueron todas las carpetas de destino. Wfue el padre de la carpeta de destino. ¿A alguien le interesa ampliar esto?

FYI: utilicé las siguientes entradas de registro para probar:

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

(Los caracteres `se usaron para delimitadores)

BillP3rd
fuente
3
¿Hiciste clic derecho en la carpeta o en la carpeta?
Coronel Panic
1

De hecho, es difícil encontrar qué significa% V o una lista de esas variables, a través de Google he descubierto que parece existir también un% L. No creo que tenga que pasar más de% V o% L a un aviso, ya que no creo que haya otra información útil. Donde% V podría ser el nombre del directorio,% L podría ser la ubicación de un archivo. Hacer un 'eco' podría ayudar en caso de duda ...

Tamara Wijsman
fuente