Windows: cómo agregar una acción de secuencia de comandos por lotes al menú contextual


18

Tengo algunos programas que crean archivos temporales o archivos de respaldo o archivos similares que no son importantes. Por ejemplo, GVim para Windows crea de manera predeterminada un archivo de respaldo en filename.txt~.

A veces necesito limpiar un directorio y eliminar todos estos archivos. He hecho un archivo .bat simple para esto. Sin embargo, es engorroso tener que iniciar CMD, navegar a la carpeta y ejecutar el script. Especialmente porque este es un script que me gustaría ejecutar a menudo en varias carpetas. Y no quiero copiar el script en varias carpetas, ya que esto sería una pesadilla de mantenimiento.

Entonces, estaba pensando que la mejor solución sería agregar un elemento de menú de clic derecho que me permitiera ejecutar el script. Para que pueda hacer clic derecho en una carpeta en el Explorador y hacer clic en Limpieza y luego ejecutar mi script en esta carpeta.

Entonces mi pregunta es: ¿Cómo agrego una acción de menú de clic derecho que ejecuta un script por lotes personalizado?

Respuestas:


18

He intentado en Windows XP SP3 con esta clave .reg. No tengo Windows 7 en este momento para probarlo correctamente, pero debería ser casi lo mismo.

  1. Abra el bloc de notas y pegue el código desde abajo.
  2. Edite según su necesidad.
  3. Guardar como MyScript1.reg
  4. Haga doble clic para importar en el registro.
  5. Pruebe haciendo clic derecho en cualquier directorio en el Explorador
Windows Registry Editor Versión 5.00

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

[HKEY_CLASSES_ROOT \ Directory \ shell \ MyScript1 \ command]
@ = "\" C: \\ MyScriptsDirectory \\ MyScript1Directory \\ MyScript1.bat \ "\"% 1 \ ""

44
He editado tu respuesta un poco. "Windows Registry Editor Version 5.00" es obligatorio 'encabezado' para archivos .reg. De lo contrario, Windows se negará a inyectar el contenido en el registro.
extremko

+1 por señalar eso. Me olvidé por completo de eso cuando el código c / p.
Robert Schmidt el

1
Intenté esto Ahora puedo hacer clic derecho directamente en una carpeta, pero no funciona si hago clic derecho dentro de una carpeta. Que en realidad es lo que quiero. ¿Como hacer eso?
ervingsb

1
Esa es una pregunta diferente a "Para que pueda hacer clic derecho en una carpeta en el Explorador y hacer clic en Limpieza y luego ejecutar mi script en esta carpeta".
Robert Schmidt

Sí, por eso lo aclaré. Perdón por ser impreciso. De hecho, lo considero como hacer clic derecho en la carpeta. Simplemente no es el icono de la carpeta, sino dentro de la carpeta.
ervingsb

18

En realidad, la respuesta actual no está desactualizada. Probé exactamente lo mismo en Windows 10 y pude agregar Run Batch scriptal menú contextual de todas las carpetas en Windows.

Este es el contenido de mi script por lotes (no funcionará con rutas UNC ):

@ECHO OFF
Se llamó a ECHO% ~ n0 con los siguientes argumentos:
SET args =% *
SI NO ESTÁ DEFINIDO args GOTO END
ECO %*
:FINAL
PAUSA

Los cambios de registro que hice se pueden replicar con este archivo REG:

Windows Registry Editor Versión 5.00

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

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

Esto solo agrega un elemento de menú contextual para todos los directorios / carpetas en Windows. Si desea que se muestre para todos y cada uno de los archivos, puede usar esto:

Windows Registry Editor Versión 5.00

[HKEY_CLASSES_ROOT \ * \ shell \ Ejecutar script]
@ = "Ejecutar y script"

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

Alternativamente, puede agregar su script por lotes a la Send Tolista de elementos creando un acceso directo a su script por lotes y colocándolo debajo %APPDATA%\Microsoft\Windows\SendTo(o ingrese shell:sendtoen la barra de direcciones)

Si desea que su script se muestre en el menú contextual que aparece cuando hace clic derecho en el espacio vacío dentro de un directorio (¿fondo de directorio?), Puede usar el siguiente archivo REG:

Windows Registry Editor Versión 5.00

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

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

No necesitas la "Icon"="%SystemRoot%\\System32\\shell32.dll,71"línea. Simplemente agrega un icono a su menú contextual que se ve así:

ventanas del icono del menú contextual


¡Gracias! Por cierto, ¿sabes cómo mostrar este menú contextual cuando hago clic derecho en el espacio vacío de la carpeta actual (no solo cuando hago clic en la carpeta en sí)?
Tom Brito

@TomBrito Por favor, vea mi última edición.
Vinayak

@Tom Brito: la modificación del menú contextual del espacio vacío parece ser respondida aquí: stackoverflow.com/questions/4902041/…
kreemoweet

@kreemoweet ¡Gracias por vincular eso! Sin embargo, descubrí esto al analizar el Editor de menú contextual .
Vinayak

@kreemoweet Cambié la cadena de ruta para Directory\Backgroundincluirla, %Vya que pasaría el directorio actual al script. Sin embargo, no estoy realmente seguro de lo que significa. %Wparece funcionar igual de bien.
Vinayak

6

Recomendaría el Editor de programas predeterminados para esta tarea. Es más fácil de usar y posiblemente más seguro que editar el registro directamente.

Elija el menú contextual ingrese la descripción de la imagen aquí

Seleccione la extensión que desea cambiar. ingrese la descripción de la imagen aquí

Elija Agregar ... ingrese la descripción de la imagen aquí

Asigne un título a su comando, busque el archivo por lotes y, opcionalmente, elija un icono para representar su comando. ingrese la descripción de la imagen aquí

Guarde el menú contextual en el registro y listo.


Me gustaría ejecutar el lote en carpetas, no en un tipo de archivo. Parece que no ayuda ...
Tom Brito

Esto me ayudó, gracias por compartir.
Daniel Kaplan

Buen programa Gracias.
Laurie Stearn

0

La solución alternativa que utilizo en Windows 10 es agregar un script a una de las carpetas en la variable de ruta, y luego, cuando esté en el explorador, use la secuencia:

  • Ctrl + L - para comenzar a escribir en la barra de búsqueda

  • escriba: cmd, luego presione Entrar - para iniciar cmd en el directorio actual

  • ejecuta tu script, escribiendo su nombre de archivo


0

@Vinayak,

Si usa la opción "enviar a", probablemente necesite agregar la línea cd /d %1al inicio del comando por lotes para que se ejecute bajo la ruta de destino.

mi archivo por lotes actual se ve así:

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

Gracias por la ayuda, me encontré con esto a través de Google en el momento adecuado :)


Esto es realmente un comentario y no una respuesta a la pregunta original. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones y, una vez que tenga suficiente reputación , podrá comentar cualquier publicación . Por favor lea ¿Por qué necesito 50 reputación para comentar? ¿Qué puedo hacer en su lugar?
DavidPostill

@DavidPostill bueno, no tenía una publicación propia en este hilo para comentar, antes de publicar su respuesta ... Y (suponiendo que quisiera decir algo digno de ser un comentario), ¿qué podría hacer para comentar? Nada presumiblemente.
barlop

@barlop Las respuestas no son un sustituto de los comentarios, como bien sabes. Una alternativa es proponer una edición a la otra respuesta ... pero eso probablemente sería rechazado.
DavidPostill

@DavidPostill mi punto es simplemente que no tiene otra opción. y no tienes muy claro ese hecho en tu comentario original. De hecho, su comentario original sugiere la idea de que tiene algunas opciones pero no las tiene.
barlop

@barlop Ah. OKAY.
Pensaré
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.