Quais variáveis especiais estão disponíveis ao escrever um comando shell para um menu de contexto

41

Ao estender o menu de contexto do shell do Windows (por exemplo, para adicionar um prompt 'Abrir comando aqui' nos diretórios), uma chave de 'comando' precisa ser criada no registro.

O valor desta chave 'command' aparentemente pode ser qualquer linha de comando válida.

Eu quero saber quais 'variáveis especiais' estão disponíveis para uso dentro desta linha de comando.

Por exemplo, eu uso o seguinte comando para abrir uma janela cmd a partir do menu de contexto de um diretório (*):

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

Não consigo encontrar nenhuma referência para o que% V realmente significa ou qual é a lista completa de tais variáveis.

(*)   Seguintes chaves de registro são criadas para isso:   [HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Directory \ shell \ cmdshell]   @ = Abrir o prompt de comando aqui "

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Diretório \ shell \ cmdshell \ command]   @="cmd.exe / e: em / f: em / s / k pushd \"% V \ ""

    
por Gio 02.05.2010 / 09:05

4 respostas

50

Um comentário feito por Chris Guzak no Estendendo os menus de atalho O artigo do MSDN lista as várias" variáveis de linha de comando "que estão disponíveis:

%* – Replace with all parameters.

%~ – Replace with all parameters starting with and following the second parameter.

%0 or %1 – The first file parameter. For example "C:\Users\Eric\Desktop\New Text Document.txt". Generally this should be in quotes and the applications command line parsing should accept quotes to disambiguate files with spaces in the name and different command line parameters (this is a security best practice and I believe mentioned in MSDN).

%<n> (where <n> is 2-9) – Replace with the nth parameter.

%s – Show command.

%h – Hotkey value.

%i – IDList stored in a shared memory handle is passed here.

%l – Long file name form of the first parameter. Note that Win32/64 applications will be passed the long file name, whereas Win16 applications get the short file name. Specifying %l is preferred as it avoids the need to probe for the application type.

%d – Desktop absolute parsing name of the first parameter (for items that don't have file system paths).

%v – For verbs that are none implies all. If there is no parameter passed this is the working directory.

%w – The working directory.

Então% L ou% l devem ser preferidos.

Veja também o link

    
por 13.09.2012 / 12:27
10

Essa pergunta me intrigou, então fiz algumas experiências. Eu tenho uma pasta C:\iso . O que eu encontrei quando fiz a coisa do botão direito:

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

I retornou um conjunto diferente de números em todas as tentativas. H era sempre 0 e S era sempre 1. D , L e V eram toda a pasta de destino. W foi o pai da pasta de destino. Alguém se importa em expandir isso?

FYI: usei as seguintes entradas do Registro para testar:

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

(os 'caracteres foram usados para delimitadores)

    
por 28.08.2010 / 08:05
2

Aqui estão os argumentos / sintaxe para cmd.exe

/k executa o comando especificado pela seguinte string para executar o comando pushd %V e desde então a única argumento que o pushd aceita é um caminho que segue que %V uma variável entregue pelo explorador que contém o caminho da pasta clicada com o botão direito.

    
por 02.05.2010 / 11:40
1

É realmente difícil encontrar o que significa% V ou uma lista dessas variáveis, através do Google eu descobri que parece existir um% L também. Eu não acho que você tem que passar mais de% V ou% L para um prompt, como não há outras informações úteis, eu acho. Onde% V poderia ser o nome do diretório,% L poderia ser um local para um arquivo. Fazer um 'eco' pode ajudar quando estiver em dúvida ...

    
por 02.05.2010 / 12:03