Usuario del software
2011-01-14 18:23:22 +0000 2011-01-14 18:23:22 +0000
59

¿Cómo creo un archivo de Windows Batch que no muestra el símbolo del sistema cuando se ejecuta?

He instalado una gema de rubí llamada Redcar, que se lanza desde la línea de comandos. Cuando se ejecuta, roba el shell hasta que termina, así que tengo que crear una nueva ventana de shell para continuar haciendo el trabajo de 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 lanzar Redcar como un atajo, presumo, pero no quiero que la ventana extra del símbolo del sistema se abra cada vez que lanzo el archivo BAT.

¿Cómo puedo simplemente ejecutar el BAT sin ver el símbolo del sistema?

Respuestas [11]

38
2011-01-21 18:41:45 +0000

No puedes -- ejecutar un archivo por lotes con el Command Prompt incorporado va a mantener una ventana abierta hasta que el archivo por lotes salga.

Lo que puedes hacer es tomar medidas para asegurarte 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 comando start. Por defecto, start regresa inmediatamente sin esperar a que el programa salga, por lo que el archivo por lotes continuará ejecutándose y, presumiblemente, saldrá inmediatamente. Si a esto le sumamos la modificación del acceso directo para ejecutar el archivo por lotes minimizado, sólo verá la barra de tareas en flash sin siquiera ver una ventana en la pantalla.

Una advertencia a esto es que si está ejecutando un programa en modo de consola, lo que muchos intérpretes de scripts hacen, el archivo por lotes esperará a que el programa salga, y usando start generará una nueva ventana de consola. Lo que necesitas hacer en este caso es ejecutar la versión del intérprete basada en Windows en lugar de la basada en la consola, no es necesario usar start. En el caso de Perl, se ejecutaría wperl.exe en lugar de perl.exe. Para Python, es pythonw.exe en lugar de python.exe. La vieja distribución win32 de Ruby que he descargado tiene rubyw.exe, que debería hacer lo mismo.

Una última posibilidad es usar una herramienta de terceros para ejecutar la línea de comandos con una ventana oculta. He oído hablar de estas cosas pero nunca he tenido un uso para ellas, así que no sé de nada en particular para señalarte.

38
22
2014-01-15 06:25:25 +0000

Creo que esta es la solución más fácil y corta para ejecutar un archivo por lotes sin abrir la ventana de DOS, puede ser muy molesto cuando quieres programar un conjunto de comandos para que se ejecuten periódicamente, por lo que la ventana de DOS sigue apareciendo, aquí está tu solución. Use un Script 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 de arriba a un editor y guarde el archivo con la extensión .VBS. Edite el nombre y la ruta del archivo .BAT según corresponda. Entonces sólo ejecuta el archivo .vbs y la magia sucede!

22
8
2013-01-02 05:37:05 +0000

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

Desde fuera traerá la ventana de la consola del cmd pero para evitar eso, puedes crear un archivo de acceso directo con propiedades modificado a inicio minimizado.

8
5
2016-09-11 08:06:00 +0000

Para ello, utilice el programa Bat To Exe Converter para convertir su archivo por lotes en un archivo ejecutable.

Al convertir 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

5
4
2012-12-18 07:07:00 +0000

Continuando con la respuesta de Dennis Williamson, puedes editar el archivo por lotes y añadir (preagregar) START /B al comando que estás ejecutando.

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

@ECHO OFF START /B putty.exe -load _name\_of\_my\_config\_file_

Funcionó perfectamente.

4
4
2011-01-14 19:32:24 +0000

Pruebe esto:

START /B batchfile

** nota añadida por barlop**

inicio /? 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.
4
3
2011-01-21 18:20:43 +0000

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

Así que GO.BAT tendrá:

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

La salida cierra la ventana del símbolo del sistema que de otra manera permanecería abierta.

Y GO2.BAT tendrá el contenido del archivo por lotes que yo 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:
 ...
3
0
2013-03-04 00:36:09 +0000

Sólo pon el interruptor /b delante del camino. No abrirá la segunda línea de comandos.

0
0
2014-10-18 16:43:48 +0000

(https://superuser.com/a/701867/141909) 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 tu lote requiere derechos de administrador, crea o usa un lote existente que llame al VBS y ejecuta ese lote como Administrador.

  2. Sin visibilidad, puede ser difícil discernir si lo que estás tratando de hacer está funcionando como quieres.

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

0
0
2016-05-20 07:11:31 +0000

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

Probablemente querrá 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 amablemente pidió que la ventana se cerrara (algunas ventanas pueden abrir un cuadro de diálogo)

Espero que esto ayude.

0