¿Cómo puedo ejecutar un programa desde un archivo por lotes sin dejar la consola abierta después de que se inicia el programa?

184

Por el momento, mi archivo por lotes se ve así:

myprogram.exe param1

El programa se inicia pero la ventana de DOS permanece abierta. ¿Cómo puedo cerrarlo?

Señor dev
fuente
3
Probablemente debería cambiar la respuesta aceptada a la que Marshall publicó.
Rev1.0

Respuestas:

163

Puede usar la palabra clave de salida. Aquí hay un ejemplo de uno de mis archivos por lotes:

start myProgram.exe param1
exit
Patrick Desjardins
fuente
18
Tenga en cuenta que esto no será bueno si utiliza la consola de forma interactiva en lugar de hacer doble clic en un archivo por lotes. En general, hay poca o ninguna necesidad de poner exiten un archivo por lotes.
Joey
27
Intenté este comando en Win8. No estoy seguro de si es diferente, pero tenga en cuenta que debe proporcionarle un título de ventana como primer parámetro. Cuando lo ejecutaba de la manera en que Patrick lo describió, simplemente abría un nuevo símbolo del sistema con "myProgram.exe" como título de la ventana:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher,
9
Tenga en cuenta que si su comando contiene espacios y lo pone entre comillas, debe agregar un parámetro extra entre comillas antes, ya que START interpreta el primer parámetro entrecomillado como nombre de ventana y solo el segundo parámetro siguiente como nombre de comando.
David Balažic
259

Use el comando de inicio para evitar que el archivo por lotes espere al programa. Solo recuerde poner una comilla doble vacía delante del programa que desea ejecutar después de "Inicio". Por ejemplo, si desea ejecutar Visual Studio 2012 desde un comando por lotes:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

Observe la doble cita después del inicio.

Marshall
fuente
55
@SharkAlley El formato correcto esstart <window name> <program name>
Kruug
55
Esta es la respuesta correcta. Gracias, las comillas dobles vacías son exactamente lo que necesitaba.
Richard
Tengo un script de respaldo que ejecuto semanalmente y lo modificaría muy ligeramente cada semana, tratando de hacer que a) cierre mi programa, b) respalde mis datos yc) reinicie el programa y cierre el símbolo del sistema. Finalmente, este símbolo del sistema se cerró (también evitó que se activara mi siguiente copia de seguridad, ¡tuve que cerrar el símbolo del sistema!).
NobleUplift
@NobleUplift: Para mí esto funcionó ... a continuación se muestra la línea exacta, "" "C: \ Archivos de programa (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe" &
Xinus
53

Mira el comando START, puedes hacer esto:

START rest-of-your-program-name

Por ejemplo, este archivo por lotes esperará hasta que salga el bloc de notas:

@echo off
notepad c:\test.txt

Sin embargo, esto no:

@echo off
start notepad c:\test.txt
Lasse V. Karlsen
fuente
31

De mi propia pregunta :

start /b myProgram.exe params...

funciona si inicia el programa desde una sesión DOS existente.

Si no, llame a un script vb

wscript.exe invis.vbs myProgram.exe %*

El método Windows Script Host Run () toma:

  • intWindowStyle: 0 significa "ventanas invisibles"
  • bWaitOnReturn: falso significa que su primer script no necesita esperar a que termine su segundo script

Aquí está invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
VonC
fuente
1
+1 Tiene que haber una manera más fácil, pero esta es la única respuesta que me funcionó.
DN
Gracias, esa bandera / b era exactamente lo que estaba buscando.
ap
21

Esto es lo único que funcionó para mí cuando intenté ejecutar una clase java desde un archivo por lotes:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

Puede personalizar el startcomando como desee para su proyecto, siguiendo la sintaxis adecuada:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)
Zosimas
fuente
18

Deberías probar esto. Inicia el programa sin ventana. En realidad, parpadea por un segundo, pero desaparece con bastante rapidez.

start "name" /B myprogram.exe param1
Chris Dail
fuente
44
La "title"opción es importante. Si la ruta del programa incluye espacios, debe estar entre comillas, por lo que debemos agregarla "title"para evitar fallas.
AD
1
Si cierra la ventana principal, también se cierra el proceso en segundo plano 'myprogram.exe'.
Aditya Gupta
14

Cómo resolver el "problema espacial" y las dependencias locales:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit
Gilco
fuente
Esta no es una respuesta a la pregunta
jeb
2
cierto, pero creo que da una buena solución que resuelve otros problemas que tuve también.
Gilco
2
Fue la solución para mí. La ventana Dos se abre pero se cierra nuevamente y la solución funciona. No entiendo los votos a favor (voté a favor)
JoeFox
Yo tampoco. la solución funciona y resuelve el problema
Gilco
2

Ya hay muchas respuestas para esta pregunta, pero estoy publicando esto para aclarar algo importante, aunque este no siempre sea el caso:

Start "C:\Program Files\someprog.exe"

Puede causar problemas en algunas versiones de Windows, ya que Startrealmente espera que el primer conjunto de comillas sea un título de Windows. Por lo tanto, se recomienda citar primero un comentario o un comentario en blanco:

Start "" "C:\Program Files\someprog.exe"

o

Start "Window Title" "C:\Program Files\someprog.exe"
Gerhard
fuente
0

Mi solución para hacer esto desde la GUI:

  1. Cree un acceso directo al programa que desea ejecutar;

  2. Edite las propiedades del acceso directo;

  3. Cambia el TARGETcampo a %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Cambiar el RUNcampo a minimizado.

¡Listo! Mira cómo te gusta ...

PD: los parámetros del programa se pueden insertar entre las dos comillas finales; la PROGRAMNAMEcadena puede ser un nombre de archivo, una ruta relativa o absoluta: si coloca una ruta absoluta y borra la letra de la unidad y el punto y coma, entonces esto funcionará en una unidad de memoria USB sin importar qué letra le asigne la computadora host. . (también, si coloca el acceso directo en la misma carpeta y precede al nombre del archivo del programa PROGRAMNAMEcon la %CD%variable, las rutas siempre coincidirán; se puede usar el mismo truco en el START INcampo).

Midas
fuente
0

Si este archivo por lotes es algo que desea ejecutar según lo programado o siempre; puede usar la herramienta de programación de Windows y no se abre en una ventana cuando inicia el archivo por lotes.

Para abrir Task Scheduler:

  • Inicio -> Ejecutar / Buscar -> 'cmd'
  • Escriba taskschd.msc-> enter

Desde el lado derecho, haga clic Create Basic Tasky siga los menús.

Espero que esto ayude.

Leustad
fuente
0

Aquí está mi solución preferida. Se toma de una respuesta a una pregunta similar.

Use una secuencia de comandos VBS para llamar al archivo por lotes:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Copie las líneas anteriores a un editor y guarde el archivo con la extensión .VBS.

Ilich
fuente