Windows: Como adicionar uma ação de script em lote ao menu Clique com o Botão Direito

18

Eu tenho alguns programas que criam arquivos temporários ou de backup ou arquivos similares que não são importantes. Por exemplo, o GVim para Windows, por padrão, cria um arquivo de backup em filename.txt~.

Às vezes, preciso limpar um diretório e remover todos esses arquivos. Eu criei um arquivo .bat simples para isso. No entanto, é complicado ter que iniciar o CMD, navegar para a pasta, executar o script. Especialmente porque esse é um script que eu gostaria de executar frequentemente em várias pastas. E não quero copiar o script para várias pastas, pois isso seria um pesadelo de manutenção.

Então, eu estava pensando, que a melhor solução seria adicionar um item de menu do botão direito que me permita executar o script. Para que eu possa clicar com o botão direito do mouse em uma pasta no Explorer, clicar em Limpeza e, em seguida, executar meu script nessa pasta.

Portanto, minha pergunta é: como adicionar uma ação de menu com o botão direito do mouse que executa um script em lote personalizado?

ervingsb
fonte

Respostas:

18

Eu tentei no Windows XP SP3 com essa chave .reg. Não possui o Windows 7 no momento para testá-lo corretamente, mas deve ser quase o mesmo.

  1. Abra o bloco de notas e cole o código abaixo.
  2. Edite conforme sua necessidade.
  3. Salvar como MyScript1.reg
  4. Clique duas vezes para importar no registro.
  5. Teste com o botão direito do mouse em qualquer diretório do Explorer
Editor do Registro do Windows versão 5.00

[HKEY_CLASSES_ROOT \ Directory \ shell \ MyScript1]
@ = "Executar MyScript1"

[HKEY_CLASSES_ROOT \ Directory \ shell \ MyScript1 \ command]
@ = "\" C: \\ MyScriptsDirectory \\ MyScript1Directory \\ MyScript1.bat \ "\"% 1 \ ""
Robert Schmidt
fonte
4
Editei sua resposta um pouco. "Windows Registry Editor Versão 5.00" é obrigatório 'cabeçalho' para arquivos .reg. Caso contrário, o Windows se recusará a injetar o conteúdo no registro.
Extremko
+1 por apontar esse. Eu esqueci totalmente disso quando o código c / p.
Robert Schmidt
1
Eu tentei isso. Agora posso clicar diretamente com o botão direito do mouse em uma pasta, mas não funcionará se clicar com o botão direito do mouse dentro de uma pasta. O que é realmente o que eu quero. Como fazer isso?
911812
1
Essa é uma pergunta diferente da pergunta "Para que eu possa clicar com o botão direito do mouse em uma pasta no Explorer, clicar em Limpeza e executar meu script nessa pasta".
Robert Schmidt
Sim, foi por isso que esclareci. Desculpe por ser impreciso. Na verdade, penso nisso como clicar com o botão direito na pasta. Não é apenas o ícone da pasta, mas dentro da pasta.
21812 Ervasb
18

Na verdade, a resposta atual não está desatualizada. Tentei exatamente a mesma coisa no Windows 10 e consegui adicionar Run Batch scriptao menu de contexto de todas as pastas no Windows.

Este é o conteúdo do meu script em lote (não funcionará com caminhos UNC ):

@ECHO OFF
ECHO% ~ n0 foi chamado com os seguintes argumentos:
SET args =% *
SE NÃO DEFINIDO args GOTO END
% ECHO *
:FIM
PAUSA

As alterações do registro que eu fiz podem ser replicadas com este arquivo REG:

Editor do Registro do Windows versão 5.00

[Script HKEY_CLASSES_ROOT \ Directory \ shell \ Run Batch]
@ = "& Executar script em lote"

[HKEY_CLASSES_ROOT \ Directory \ shell \ Executar script em lote \ comando]
@ = "\" H: \\ BATCH_FILE_PATH \\ context-batch.bat \ "\"% 1 \ ""

Isso adiciona apenas um item de menu de contexto para todos os diretórios / pastas no Windows. Se você deseja que ele seja exibido para todo e qualquer arquivo, use:

Editor do Registro do Windows versão 5.00

[Script HKEY_CLASSES_ROOT \ * \ shell \ Run]
@ = "Executar e script"

[HKEY_CLASSES_ROOT \ * \ shell \ Executar script \ comando]
@ = "\" H: \\ BATCH_FILE_PATH \\ context-batch.bat \ "\"% 1 \ ""

Como alternativa, você pode adicionar seu script em lotes à Send Tolista de itens, criando um atalho para o script em lotes e colocando-o em %APPDATA%\Microsoft\Windows\SendTo(ou entre shell:sendtona barra de endereços)

Se você deseja que seu script seja exibido no menu de contexto que aparece quando você clica com o botão direito do mouse no espaço vazio em um diretório (segundo plano de diretório?), Pode usar o seguinte arquivo REG:

Editor do Registro do Windows versão 5.00

[HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ Executar script em lote]
@ = "& Executar script em lote"
"Icon" = "% SystemRoot% \\ System32 \\ shell32.dll, 71"

[HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ Executar script em lote \ comando]
@ = "H: \\ BATCH_FILE_PATH \\ context-batch.bat \"% V \ ""

Você não precisa da "Icon"="%SystemRoot%\\System32\\shell32.dll,71"linha. Ele simplesmente adiciona um ícone ao seu menu de contexto com a seguinte aparência:

janelas do ícone do menu de contexto

Vinayak
fonte
Obrigado! A propósito, você sabe como mostrar esse menu de contexto quando clico com o botão direito do mouse no espaço vazio da pasta atual (não apenas quando clico na própria pasta)?
Tom Brito #
@TomBrito Por favor, veja minha edição mais recente.
Vinayak #
@ Tom Brito: Modificando o menu de contexto espaço vazio parece ser respondida aqui: stackoverflow.com/questions/4902041/...
kreemoweet
@kreemoweet Obrigado por vincular isso! No entanto, descobri isso analisando o Context Menu Editor .
Vinayak 28/04
@kreemoweet Alterei a string do caminho para Directory\Backgroundincluir, %Vpois isso passaria o diretório atual para o script. No entanto, não tenho muita certeza do que isso significa. %Wparece funcionar tão bem.
Vinayak 28/04
6

Eu recomendaria o Editor de Programas Padrão para esta tarefa. É mais amigável ao usuário e sem dúvida mais seguro do que editar o registro diretamente.

Escolha menu de contexto insira a descrição da imagem aqui

Selecione a extensão que você deseja alterar. insira a descrição da imagem aqui

Escolha Adicionar ... insira a descrição da imagem aqui

Atribua um título ao seu comando, navegue até o arquivo em lotes e, opcionalmente, escolha um ícone para representar seu comando. insira a descrição da imagem aqui

Salve o menu de contexto no registro e pronto.

Xtremity
fonte
Gostaria de executar o lote em pastas, não em um tipo de arquivo. Parece que não ajuda ...
Tom Brito
Isso me ajudou, obrigado por compartilhar.
Daniel Kaplan
Bom programa. Obrigado.
Laurie Stearn
0

Solução alternativa que eu uso no Windows 10 é adicionar script a uma das pastas na variável de caminho e, quando você estiver no explorer, use a sequência:

  • ctrl + L - para começar a escrever na barra de pesquisa

  • digite: cmd e pressione Enter - para iniciar o cmd no diretório atual

  • execute seu script digitando o nome do arquivo

jabone
fonte
0

@Vinayak,

Se você estiver usando a opção "enviar para", provavelmente precisará adicionar a linha cd /d %1ao início do comando em lote para que ele seja executado no caminho de destino.

meu arquivo em lotes atual fica assim:

@echo off
cd /d %1    
del *.txt
pause

Obrigado pela ajuda, aconteceu de eu tropeçar nisso via google no momento certo :)

Chris
fonte
Este é realmente um comentário e não uma resposta à pergunta original. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post . Leia Por que preciso de 50 reputação para comentar? O que posso fazer em vez disso?
DavidPostill
@ DavidPostill bem, ele não tinha um post próprio neste tópico para comentar, antes de postar sua resposta .. E (supondo que ele quisesse dizer algo digno de ser um comentário), o que ele poderia fazer para comentar? presumivelmente nada.
barlop 23/09/16
As respostas @barlop não substituem os comentários, como você bem sabe. Uma alternativa é propor uma edição para a outra resposta ... mas isso provavelmente seria rejeitado.
DavidPostill
@DavidPostill meu argumento é apenas que então ele não tem opção. e você não está muito claro sobre esse fato no seu comentário original. De fato, seu comentário original é sugestivo da idéia de que ele tem algumas opções, mas ele não.
barlop 23/09/16
@barlop Ah. ESTÁ BEM. Vou pensar em uma redação melhor ...
DavidPostill