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

46

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

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

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 do cmd no menu de contexto de um diretório (*):

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

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


(*) As seguintes chaves do Registro são criadas para isso:

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

Respostas:

58

Um comentário de Chris Guzak no artigo MSDN do Extending Shortcut Menus lista as várias "variáveis ​​de linha de comando" disponíveis:

% * - Substitua por todos os parâmetros.

% ~ - Substitua por todos os parâmetros começando com e seguindo o segundo parâmetro.

% 0 ou% 1 - O primeiro parâmetro do arquivo. Por exemplo "C: \ Usuários \ Eric \ Desktop \ Novo Documento de Texto.txt". Geralmente, isso deve estar entre aspas e a análise de linha de comando dos aplicativos deve aceitar aspas para desambiguar arquivos com espaços no nome e diferentes parâmetros de linha de comando (essa é uma prática recomendada de segurança e acredito que seja mencionada no MSDN).

% <n> (onde <n> é 2-9) - Substitua pelo enésimo parâmetro.

% s - Mostrar comando.

% h - valor da tecla de atalho.

% i - IDList armazenado em um identificador de memória compartilhada é passado aqui.

% l - formato longo do nome do arquivo do primeiro parâmetro. Observe que os aplicativos Win32 / 64 receberão o nome longo do arquivo, enquanto os aplicativos Win16 recebem o nome curto do arquivo. É preferível especificar% l, pois evita a necessidade de investigar o tipo de aplicativo.

% d - Nome de análise absoluta da área de trabalho do primeiro parâmetro (para itens que não possuem caminhos do sistema de arquivos).

% v - para verbos que não são nenhum, implica tudo. Se nenhum parâmetro for passado, este é o diretório de trabalho.

% w - O diretório de trabalho.

Portanto,% L ou% l deve ser preferido.

Consulte também http://www.robvanderwoude.com/ntstart.php

juze
fonte
18
Não entendo o que se entende por "Para verbos que não são nenhum, implica tudo".
Coronel Panic
2
Um aviso sobre %W: nem sempre está disponível e emitirá uma mensagem de erro enigmática se usada em seu commandvalor. Por exemplo, chamar o item de menu de contexto no menu de contexto de uma unidade ou de uma pasta de biblioteca não inicializará essa variável. Evite seu uso fora da entrada do menu de contexto de um manipulador de arquivos.
Sam17 #
Alguém já tentou %~? Eu só recebo um erro.
Cdlvcdlv
2
%Vdeve ser usado se você quiser o nome do diretório, ie. quando você deseja adicionar seu comando no menu de contexto ao clicar em segundo plano, não em um único arquivo ou nome de diretório. %Lnão vai funcionar nesse caso.
EnterTheNameHere Bohemian
11

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

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

Iretornou um conjunto diferente de números a cada tentativa. Hfoi sempre 0 e Sfoi sempre 1. D, Le Vestavam todos a pasta de destino. Wera o pai da pasta de destino. Alguém quer 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)

BillP3rd
fonte
3
Você clicou com o botão direito na pasta ou na pasta?
Coronel Panic
1

Na verdade, é difícil encontrar o que% V significa ou uma lista dessas variáveis. Através do Google, descobri que também parece existir um% L. Não acho que você precise passar mais de% V ou% L para um prompt, pois não há outras informações úteis. Onde% V pode ser o nome do diretório,% L pode ser um local para um arquivo. Fazer um 'eco' pode ajudar em caso de dúvida ...

Tamara Wijsman
fonte