Embora o cmd.exe possa funcionar com caminhos UNC usando PUSHD \\UNC\Path
, estou tentando iniciar o cmd ou um comando semelhante a partir de um caminho UNC. Aqui está o porquê:
Estou adicionando um "Mapear unidade de rede aqui" ao meu conjunto de ferramentas de menu de contexto, como "Iniciar o Powershell aqui" e "Abrir prompt de comando aqui". Eles adicionam chaves de registro ao registro do Windows e isso funciona muito bem.
Como exemplos, abra um prompt de comando aqui:
"cmd /s /k ""VER && TITLE Command Prompt: %1 && PUSHD ""%1"" "" "
(Para pastas clicadas com o botão direito, funciona para caminhos UNC)
"cmd /s /k ""VER && TITLE Command Prompt: %%%CD%%%"" "
(Para planos de fundo de diretórios clicando com o botão direito, não funciona para caminhos UNC)
O comando é inserido como uma chave de registro DWORD e funciona ao clicar com o botão direito em uma pasta:
"net use * ""%1"" "
(Para pastas clicadas com o botão direito, funciona para caminhos UNC)
"net use * ""%%%CD%%%"" "
(Para planos de fundo de diretórios clicando com o botão direito, não funciona para caminhos UNC)
Suspeito %%%CD%%%
que esteja sendo expandido pelo cmd.exe, que não iniciará em um caminho UNC.
Minha pergunta é; como obtenho o caminho do 'plano de fundo de uma unidade ou diretório' clicado com o botão direito para os caminhos UNC e Windows expandidos em uma chave de registro para fins de passá-lo para um comando?
Eles entrarão HKCR,Directory\Shell\xxx\command
e HKCR,Directory\Background\Shell\xxx\command
, respectivamente.
Este é um projeto de código aberto, disponível no GitHub:https://github.com/Ehryk/ContextMenuTools
Responder1
Não tenho certeza... mas você quis dizer algo assim?(você precisa usar %V em vez de %1)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd]
@="Open cmd here"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command]
@="cmd /s /k \"VER && TITLE Command Prompt: \"%V\" && PUSHD \"%V\" \""
(Aliás, NoWorkingDirectory é para que você não receba uma mensagem de erro inicial quando o cmd é aberto com um UNC como diretório de trabalho. Isso inicia o cmd sem um diretório atual, após o qual você faz um pushd para obter uma letra de unidade temporária)
Editar: como você está clicando em um espaço em branco de um diretório, o parâmetro% 1 não é preenchido (como acontece se você clicar no próprio diretório). Então você precisa usar% V ou% W. Eles representam o diretório de trabalho que é o caminho UNC ao clicar com o botão direito em um espaço em branco de um diretório de rede.
Veraquipara obter uma lista completa dessas variáveis.