Haga que el símbolo del sistema inicie una aplicación como el Bloc de notas y la bloquee hasta que se cierre

Haga que el símbolo del sistema inicie una aplicación como el Bloc de notas y la bloquee hasta que se cierre

Tengo un script por lotes. Básicamente quiero que presente al usuario una ventana de bloc de notas abierta con un archivo de configuración para que el usuario lo edite cada vez que ejecute el script, y quiero que el símbolo del sistema espere hasta que se cierre este programa para continuar. ejecución y ejecute el programa que utiliza este archivo de configuración.

Quiero hacer esto porque no quiero recibir información del usuario en el script por lotes con el estilo de comando "set /P" y tener que configurar el análisis, la lectura y la escritura en ese archivo de configuración que tiene muchos valores para inspeccionar.

Creo que el comportamiento estándar en Windows al ejecutar cualquier programa ejecutable es que, para los archivos "exe", abrirá el programa en su propio proceso y lo controlará inmediatamente de nuevo al script/símbolo del sistema. Para los archivos de script "bat" y "cmd", ejecutará el script y esperará hasta que el control vuelva al primer script o símbolo del sistema. Este debería ser el comportamiento al menos al llamar al otro script con el comando "LLAMADA" o al llamarlo directamente.

Ahora, en Linux, creo que el comportamiento predeterminado para el contenido ejecutable, que es tanto código de máquina nativo que puede venir sin una extensión, como scripts como archivos "sh", se ejecutan de forma bloqueante, a menos que especifique el carácter comercial ("&") en algún lugar de la línea de entrada.

Por lo tanto, estoy tratando de lograr el comportamiento de bloqueo en Windows, ya que se logra más fácilmente en Linux, y me gustaría que el cierre del programa active la secuencia de comandos original para continuar o devolver el control al símbolo del sistema.

Respuesta1

Podrías usar cualquiera de los dosstartdominio(tenga en cuenta el orden de /B /WAITlos interruptores)

start "" /B /WAIT notepad.exe "somefile"

o simplemente

notepad.exe "somefile"

Según el enlace anterior:

Cuando ejecuta una GUIaplicación de interfaz gráfica de usuario ( ) de 32 bits, cmdno espera a que la aplicación se cierre antes de regresar al símbolo del sistema.Este comportamiento no ocurre si ejecuta la aplicación desde un script de comando.

Editarcon respecto al comentario de Karan:¿Por qué se requiere /B?

/Binicia una aplicación sin abrir una nueva ventana del símbolo del sistema.

  • A decir verdad: si ejecutas unaplicación de interfaz gráfica de usuarioentoncesNoSe abre una nueva ventana del símbolo del sistema aunque /Bse omita el interruptor.
  • Por otro lado, si ejecutas unherramienta de línea de comando, omitir el /Binterruptor hace que se ejecute esa herramienta en una nueva ventana del símbolo del sistema quecerrará inmediatamentedespués de que llegue a su fin ytoda su producción se pierde.

Por lo tanto, uso los /B /WAITinterruptores juntos como una cuestión de principio general: mantener el mismo comportamiento independientemente de la disposición del programa iniciado y evitar pensar en ello...

Suplementoen orden de /B /WAITinterruptorescon ejemplos y más enlaces de StackOverflow: start /WAIT /Bno funciona (el /waitargumento se ignora) mientras start /B /WAITfunciona...

Respuesta2

notepad.exe | echo > NUL

Lo que esto hace es abrir notepad.exe y toda su salida se redirige al comando echo > NUL. Para redirigir toda la salida, el programa debe finalizar. Por lo tanto tenemos que esperar hasta que finalice notepad.exe. La salida se hace eco. Echo no usa la entrada de ninguna manera y simplemente envía algo a NUL. NUL es un flujo estándar de Windows que no lleva a ninguna parte.

Respuesta3

Al escribir la pregunta me llegó una respuesta, aunque no logra el resultado exacto que pretendía.

Sería abrir cualquier programa que quisiera abrir y agregar el comando "pausar" directamente después de ese en la línea siguiente. Pausaría la ejecución del script lo suficiente hasta que el usuario cierre la nueva ventana del programa que acaba de aparecer, y necesitaría darse cuenta de que necesita avanzar manualmente el script desde ese punto. Pausa imprime un mensaje que explica lo que está sucediendo para informar potencialmente al usuario (" Press any key to continue . . .").

Esto no es un problema importante a menos que el script se minimice por cualquier motivo y el usuario crea que ha terminado. Tampoco es genial porque no reanuda automáticamente la ejecución del resto del script cuando se cierra el programa, que es el efecto que quiero.

Respuesta4

Esto es lo que funcionó para mí al iniciar Firefox:

start "" /B /WAIT "G:\Programs\Mozilla Firefox\firefox.exe" | pause

información relacionada