Windows: Como adicionar ação de script em lote ao menu do Right Click

14

Eu tenho alguns programas que cria arquivos temporários ou arquivos de backup ou arquivos semelhantes 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 fiz um arquivo .bat simples para isso. No entanto, é complicado ter que iniciar o CMD, navegar até a pasta, executar o script. Especialmente porque este é um script que gostaria de executar frequentemente em várias pastas. E eu 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 permitisse executar o script. Para que eu possa clicar com o botão direito do mouse em uma pasta no Explorer, clicar em Limpar e depois executar meu script nessa pasta.

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

    
por ervingsb 04.07.2012 / 08:45

4 respostas

14

Eu tentei no Windows XP SP3 com essa chave .reg. Não tem 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. Testar por clique com o botão direito do mouse em qualquer diretório no Explorer
Windows Registry Editor Version 5.00

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

[HKEY_CLASSES_ROOT\Directory\shell\MyScript1\command]
@="\"C:\MyScriptsDirectory\MyScript1Directory\MyScript1.bat\" \"%1\""
    
por 04.07.2012 / 12:15
11

Na verdade, a resposta atual não está desatualizada. Eu tentei exatamente a mesma coisa no Windows 10 e foi capaz de adicionar Run Batch script ao menu de contexto de todas as pastas no Windows.

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

@ECHO OFF
ECHO %~n0 was called with the following arguments:
SET args=%*
IF NOT DEFINED args GOTO END
ECHO %*
:END
PAUSE

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

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Run Batch script]
@="&Run Batch script"

[HKEY_CLASSES_ROOT\Directory\shell\Run Batch script\command]
@="\"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ê quiser mostrar para cada arquivo, você pode usar isto:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Run script]
@="Run &script"

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

Como alternativa, você pode adicionar seu script em lote à lista Send To item criando um atalho para o script em lote e colocando-o em %APPDATA%\Microsoft\Windows\SendTo (ou digite shell:sendto na barra de endereço)

Se você quiser que seu script apareça no menu de contexto que aparece quando você clica com o botão direito no espaço vazio dentro de um diretório (diretório de fundo?), você pode usar o seguinte arquivo REG:

Windows Registry Editor Version 5.00

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

[HKEY_CLASSES_ROOT\Directory\Background\shell\Run Batch script\command]
@="H:\BATCH_FILE_PATH\context-batch.bat \"%V\""

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

    
por 28.04.2016 / 16:24
2

Eu recomendaria Default Programs Editor para esta tarefa. É mais amigável e provavelmente mais seguro do que editar o registro diretamente.

Escolha o menu de contexto

Selecioneaextensãoquevocêdesejaalterar.

EscolhaAdicionar...

Dêumtítuloaoseucomando,navegueatéoarquivoemlotee,opcionalmente,escolhaumíconepararepresentarseucomando.

Salve o menu de contexto no registro e pronto.

    
por 28.04.2016 / 17:36
0

@Vinayak,

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

meu arquivo em lote atual é assim:

@echo off
set targetfolder=%1
cd /d %1

del *.txt
pause

não tenho certeza se preciso do "set targetfolder =% 1", mas funciona, então estou mantendo assim:)

Obrigado pela ajuda, por acaso me deparei com isso via google no momento certo:)

    
por 28.04.2016 / 22:30