¿Cómo creo un archivo por lotes de Windows que no muestra el símbolo del sistema cuando se ejecuta? [duplicar]


58

He instalado una gema de rubí llamada Redcar, que se inicia desde la línea de comandos. Cuando se ejecuta, roba el shell hasta que termina, por lo que tengo que crear una nueva ventana de shell para continuar trabajando en la línea de comandos. El shell que estoy usando es el shell GITBash de MySysGit.

Encontré un archivo Redcar.bat que está destinado a iniciar Redcar como acceso directo, supongo, pero no quiero que se abra la ventana del símbolo del sistema adicional cada vez que inicie el archivo BAT.

¿Cómo ejecuto el BAT sin ver el aviso?


1
Ojalá supiera la respuesta a este +1 para una buena pregunta.
Supercereal

@ Kyle una pregunta similar se ha hecho antes superuser.com/questions/191149/how-to-execute-cmd-exe-silently menciona HStart y menciona brevemente que un archivo VBS puede lanzar también
barlop

¿Puedes actualizar tu respuesta seleccionada? ¿Es posible y muy simple cuando sabes cómo ... archivo por lotes: línea 1: set var1=hello.txtlínea 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown

Simplemente use ::o @REM. Fuente: superuser.com/a/843754/101936
PHPst

Respuestas:


38

No puede: la ejecución de un archivo por lotes con el símbolo del sistema incorporado mantendrá una ventana abierta hasta que el archivo por lotes salga.

Lo que puede hacer es tomar medidas para asegurarse de que el archivo por lotes salga lo más rápido posible. Si es posible, modifique el archivo por lotes para ejecutar cualquier programa con el startcomando. Por defecto, startregresa inmediatamente sin esperar a que el programa salga, por lo que el archivo por lotes continuará ejecutándose y, presumiblemente, saldrá inmediatamente. Combine eso con la modificación de su acceso directo para ejecutar el archivo por lotes minimizado, y solo verá el flash de la barra de tareas sin siquiera ver una ventana en pantalla.

Una advertencia a esto es que si está ejecutando un programa en modo consola, que son muchos de los intérpretes de script, el archivo por lotes esperará a que el programa salga, y el uso startgenerará una nueva ventana de consola. Lo que debe hacer en este caso es ejecutar la versión del intérprete basada en Windows en lugar de la versión de la consola, no es startnecesario. Para Perl, correría en wperl.exelugar de perl.exe. Para Python, es en pythonw.exelugar de python.exe. La distribución anterior de Win32 Ruby que he descargado tiene rubyw.exe, que debería hacer lo mismo.

Una última posibilidad es utilizar una herramienta de terceros para ejecutar el símbolo del sistema con una ventana oculta. He oído hablar de tales cosas, pero nunca tuve un uso para ellas, así que no sé nada en particular para señalarlo.


Gracias que responde mi pregunta. Lo que era realmente molesto no era que apareciera la ventana de solicitud, sino que tenía que permanecer abierta mientras el programa se estaba ejecutando. Ahora el flash es totalmente soportable, y no tan molesto. Verificará si puedo modificar el script para ejecutar rubyw en lugar de ruby.
Jake

1
Muchas gracias por explicar la diferencia entre "python" y cualquier "pythonw". Finalmente encontré la solución para ejecutar las herramientas de la ventana de python que tenemos sin el símbolo del sistema en segundo plano.
FP

'Java.exe' y 'javaw.exe' son lo mismo.
redbeam_

Puede, simplemente no en el código de lote en sí. Realmente hay una serie de Qs aquí con As sobre cómo ocultar el símbolo del sistema superuser.com/questions/62525/... superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

Creo que esta es la solución más fácil y más corta para ejecutar un archivo por lotes sin abrir la ventana de DOS, puede ser muy molesto cuando desea programar un conjunto de comandos para que se ejecute periódicamente, por lo que la ventana de DOS sigue apareciendo, aquí está su solución . Use una secuencia de comandos VB para llamar al archivo por lotes ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Copie las líneas anteriores a un editor y guarde el archivo con la extensión .VBS. Edite el nombre de archivo .BAT y la ruta en consecuencia. ¡Entonces solo ejecute el archivo .vbs y la magia sucede!


8

Puede ejecutar otro archivo por lotes con START / MIN CMD.EXE / C mybatchfile.bat desde el símbolo del sistema.

Desde afuera, traerá la ventana de la consola cmd, pero para evitar eso, puede crear un archivo de acceso directo con propiedades modificadas para comenzar minimizadas .


2
En Windows 8.1, esta opción está en Propiedades -> pestaña Acceso directo -> Ejecutar: -> Minimizado (el valor predeterminado es "Ventana normal")
pix

5

Para hacer esto, use el programa Bat To Exe Converter para convertir su archivo por lotes a un archivo ejecutable.

Al convertirlo en un ejecutable, encontrará una opción para ejecutar su archivo como una aplicación invisible en la sección de visibilidad. Por lo tanto, cuando lo ejecute, se ejecutará sin una ventana.

Bat to exe


El sitio web requiere que su computadora "resuelva" crypto captcha. Aquí está el programa nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks el

4

Continuando con la respuesta de Dennis Williamson, puede editar el archivo por lotes y agregar (anteponer) START /Bal comando que está ejecutando.

Por ejemplo, tengo un archivo por lotes que ejecuta masilla y tenía el mismo problema (CMD adicional), así que así es como lo escribí:

@ECHO OFF
START / B putty.exe -load name_of_my_config_file

Funcionó perfectamente.


4

Prueba esto:

START /B batchfile

nota agregada por barlop

comienzo /? dice de / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
Eso podría funcionar si tengo un símbolo del sistema abierto, pero cuando estoy usando el .bat estoy haciendo doble clic en él o en un acceso directo en mi escritorio. Estoy tratando de evitar tener que tener un símbolo del sistema para iniciar este programa.
Jake

3

No tengo claro cuál es su problema, pero con algunos de mis archivos por lotes, uso un "dumy" cuyo único propósito es iniciar el archivo por lotes principal.

Entonces GO.BAT tendrá:

cmd /c go2.bat %1 %2 %3
exit

La salida cierra la ventana del símbolo del sistema que, de lo contrario, permanecería abierta.

Y GO2.BAT tendrá el contenido del archivo realmente por lotes que deseo.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

Si todavía está interesado en no mostrar la ventana de la consola, aquí hay una solución de stackoverflow que funcionó para mí (en mi caso, no puse nada en el registro, pero donde lo necesitaba).


0

Simplemente coloque el modificador / b delante del camino. No abrirá el segundo símbolo del sistema.


0

La respuesta de Indago ha sido la mejor solución para mí hasta ahora. El archivo VBS me permite ejecutar la funcionalidad del lote a través del script, evitando que la ventana CMD ocurra en primer lugar. Sin embargo, hay algunas advertencias:

  1. Si su lote requiere derechos de administrador, cree o use un lote existente que llame a VBS y ejecútelo como administrador.

  2. Sin visibilidad, puede ser difícil discernir si lo que estás tratando de hacer realmente funciona de la manera que quieres.

Dicho esto, primero pondría un pequeño simulacro de configuración / prueba de unidad para asegurarme de que funciona exactamente de la manera deseada, antes de integrarlo.


0

He usado cmdow en el pasado, y parece haber funcionado para lo que quiero.

Probablemente quiera usar una de las siguientes opciones: CMDOW [window] /HID

/HID oculta la ventana especificada

CMDOW [window] /END

/END cierra la ventana especificada

CMDOW [window] /CLS

/CLS cortésmente pidió que la ventana se cerrara (algunas ventanas pueden abrir un cuadro de diálogo)

Espero que esto ayude.


-5

Simplemente haga un acceso directo al archivo por lotes, haga clic derecho sobre él, haga clic en Properties, vaya a la Generalpestaña, marque la casilla llamada Hidden, haga clic en Applyy luego en OK.
Ahora, cuando abra el acceso directo, ejecutará el archivo por lotes Oculto.


Esto está mal, ya que solo oculta el archivo de acceso directo / lote, mientras que lo que el usuario quiere es que el archivo por lotes se ejecute de forma invisible.
No arraigar aquí por favor ...
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.