Programa de inicio de script por lotes de Windows y consola de salida

90

Tengo un script por lotes que utilizo para iniciar un programa, como notepad.exe. Cuando hago doble clic en este archivo por lotes, el bloc de notas se inicia normalmente, pero la ventana negra de cmdquién lo lanzó notepad.exepermanece en segundo plano. ¿Qué tengo que hacer para iniciar notepad.exey hacer desaparecer la ventana de cmd?

editar : es más complicado que usar \I.

Las cmdllamadas cygwiny cygwincomienza notepad. yo suelo

start \I \path\cygwin\bin\bash.exe

y la primera ventana (cmd) desaparece, pero una segunda ventana (\ cygwin \ bin \ bash.exe) todavía está en segundo plano. En el script cygwin que utilicé notepad.exe &y luego salí .

Possa
fuente

Respuestas:

204
start "" "%SystemRoot%\Notepad.exe"

Mantenga ""entre el inicio y la ruta de su aplicación.


Explicación agregada:

Normalmente, cuando iniciamos un programa desde un archivo por lotes como el siguiente, tendremos las ventanas negras en el fondo como dijo OP.

%SystemRoot%\Notepad.exe

Esto se debe a que el Bloc de notas se ejecuta en el mismo símbolo del sistema (proceso). El símbolo del sistema se cerrará DESPUÉS de que se cierre el bloc de notas. Para evitar eso, podemos usar el startcomando para iniciar un proceso separado como este.

start %SystemRoot%\Notepad.exe

Este comando está bien siempre que no tenga espacio en la ruta. Para manejar el espacio en la ruta por si acaso, agregamos las "comillas como esta.

start "%SystemRoot%\Notepad.exe"

Sin embargo, ejecutar este comando simplemente iniciaría otro símbolo del sistema en blanco. ¿Por qué? Si busca el start /?, el startcomando reconocerá el argumento entre el "como el título del nuevo símbolo del sistema que se va a ejecutar. Entonces, para resolver eso, tenemos el comando así:

start "" "%SystemRoot%\Notepad.exe"

El primer argumento de ""es establecer el título (que establecemos en blanco), y el segundo argumento de "%SystemRoot%\Notepad.exe"es el comando de destino para ejecutar (que admite espacios en la ruta).

Si necesita agregar parámetros al comando, simplemente añádalos entre comillas, es decir:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 
suma de comprobación
fuente
12
Nota: cuando se quiere iniciar un archivo JAR de Java esta manera, asegúrese de usar el javawejecutable (no sólo javaporque javase iniciará otra ventana por lotes): por ejemplostart "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron
@checksum Por favor, ¿podría ampliar también su ejemplo sobre cómo redirigir el error estándar y la salida estándar de la aplicación que se inicia?
Starfish
@Starfish Creo que el bloc de notas no tiene stdout y stderr. Pero para tu pregunta, sería algo así como application.exe > stdout.txt 2>stderr.txt. Agregar su pregunta a la respuesta anterior se desviaría de la pregunta del cartel original. Puede ser que pueda comenzar una nueva pregunta para hacerla con más detalle.
suma de comprobación
1
Solución completamente sin sentido. Windows gana de nuevo.
Ярослав Рахматуллин
9

Utilice start notepad.exe.

Más información con start /?.

Benoit
fuente
1
¿Y precisamente qué argumento? /B? Lo leo, pero si uso start /B notepad.exela ventana cmd no desaparece.
Possa
Ok, es más complicado que usar \I. El cmd llama cygwin y cygwin inicia el bloc de notas. Utilizo start \I cygwiny la primera ventana desaparece, pero una segunda ventana todavía está en el fondo. En el script cygwin usé notepad.exe &y luegoexit
Possa
cygstart inicia el bloc de notas, pero la consola permanece en segundo plano.
Possa
5

La forma más sencilla es empezar con start

start notepad.exe

Aquí puede encontrar más información sobrestart

hermanos28
fuente
4

%ComSpec% /c %systemroot%\notepad.exe

MrBogus
fuente
esto no cierra la ventana de cmd%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic
0

Hmm ... lo hago en uno de mis archivos por lotes como este, sin usar CALL o START:

%SystemRoot%\notepad.exe ..\%URI%
GOTO ENDF

Sin embargo, no tengo Cygwin instalado y estoy en Windows XP.

djangofan
fuente
Tengo un error "The system cannot find the batch label specified - ENDF"en Windows 10
jcubic
0
start "" ExeToExecute

El método no me funciona en el caso de Xilinx xsdk, porque como lo señala @jeb en los comentarios a continuación, es en realidad un archivo bat.

entonces lo que no funciona de facto es

start "" BatToExecute

Estoy intentando abrir xsdk así y abre un cmd separado que debe cerrarse y xsdk puede ejecutarse por sí solo

Antes de iniciar xsdk, ejecuto (fuente) Env / Paths (con settings64.bat ) para que el comando xsdk.bat sea reconocido (simplemente como xsdk, sin el .bat )

que funciona con .bat

call BatToExecute
Tomasz Janicki
fuente
2
Probablemente esto responda a una pregunta, pero no a esta. La pregunta es sobre cómo iniciar un archivo .exe ( notepad.exe) y desacoplarlo de cmd.exe. Responde cómo iniciar un archivo .bat en la misma instancia
jeb
-4

Intenta empezar path\to\cygwin\bin\bash.exe

yyyx
fuente
1
Esto realmente no responde a la pregunta de los OP. No estaba preguntando cómo empezar cygwin.
Jeremy J Starcher