2010-09-25 04:19:24 +0000 2010-09-25 04:19:24 +0000
25
25

¿Por qué cmd no sale después de la ejecución del archivo por lotes?

¿Por qué cmd no sale después de la ejecución del archivo por lotes?

He probado:

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

y

@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit

Respuestas (11)

31
31
31
2010-09-25 07:28:36 +0000

Si la aplicación Java no termina (por ejemplo, si está utilizando el archivo por lotes para lanzar la aplicación Java), utilice el comando start para lanzarla:-

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Esto lanzará la aplicación java y continuará ejecutando el archivo por lotes sin esperar a que la aplicación java termine.

20
20
20
2012-01-26 01:17:52 +0000

Explicación:

Así es como funciona; un archivo por lotes se procesa una línea a la vez. Cada comando se ejecuta por turnos y el procesador de lotes espera a que un comando termine antes de iniciar el siguiente. El problema que estás experimentando se debe a que la aplicación Java que estás lanzando (Jilko.jar) es un programa de ventana que continúa ejecutándose incluso después de la línea que lo lanza. Si fuera una herramienta que realiza alguna acción y luego termina, el archivo por lotes continuaría con el siguiente comando (o saldría si no hay más). Como el programa sigue en marcha, el procesador de lotes espera a que se cierre la ventana antes de seguir adelante. Puede ver esto en acción saliendo del programa Java: la ventana de la consola con el archivo por lotes se cierra entonces.

Solución:

Lo que hay que hacer para solucionarlo, es ordenar al procesador de lotes que lance el programa y continúe sin esperar como tal:

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Como mencionó Terrance , el "" es el título a utilizar para la ventana de la consola. Sin embargo sólo es opcional si el comando no está entre comillas; de lo contrario es requerido. Puedes poner algo ahí si quieres o dejarlo vacío, pero si el comando está entre comillas, debe estar presente, de lo contrario el intérprete de comandos tratará el comando entrecomillado como el título y abrirá una consola que simplemente se queda ahí esperando que se haga algo.

En su lugar, puede utilizar el siguiente comando, pero las comillas son más fáciles y seguras, ya que no se garantiza que los nombres cortos sean los mismos en todos los sistemas.

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

El comando start es un comando incorporado que genera un proceso (básicamente como ejecutar un programa desde el menú Inicio). Así que lo que ocurre en este contexto es que el procesador de lotes ejecuta el comando start que a su vez ejecuta el programa especificado y termina (él mismo, no el programa generado). De este modo, el procesador de lotes continúa como se esperaba. También tiene algunas opciones que pueden ser útiles, como ejecutar el programa minimizado (/min) o maximizado (/max), ejecutarlo en baja prioridad (/low), etc. Ver start /? para más detalles.

7
7
7
2013-05-15 23:43:30 +0000

He descubierto que algunos de los programas que lanzo dejan procesos en ejecución, y la ventana de la consola no se cierra hasta que terminan si sólo los ejecuto lanzando el ejecutable.

El programa START arregla eso, pero el viejo problema con START sigue existiendo. No se puede usar simplemente

START "c:\my dir\myfile.exe"

El primer parámetro de START sigue siendo el nombre de la ventana. Si lo omites, simplemente abres una caja de consola CMD con la ventana llamada como sea que hayas tratado de lanzar. En el caso anterior, ahora tendría una ventana de consola con el título de la ventana “c:\my dir\myfile.exe”. No es lo que quería.

Para omitir el nombre de la ventana, basta con utilizar un par de comillas dobles para definir una cadena vacía, como por ejemplo

START "" "c:\my dir\myfile.exe"

Por último, termine su archivo por lotes con un comando EXIT para asegurarse de que se cierra.

Este método parece funcionar de forma consistente en Windows 7 y 8.

Para la resolución de problemas, encuentro que añadir un ECHO de lo que voy a hacer, y luego un TIMEOUT de lo que acabo de hacer, ayuda mucho. Por ejemplo:

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

Como el Timeout te da una cuenta atrás, no necesitas hacer un ECHO de que estás a punto de retrasar.

5
5
5
2012-01-26 00:59:18 +0000

Además, utilice EXIT en todo momento, en Windows 7, ya que el hecho de llegar al final del archivo por lotes no lo termina necesariamente, como en las versiones anteriores de Windows. Windows 7 puede ser más sensible a esto que las versiones anteriores de NT (por ejemplo, Windows 2000 Professional). Esto se mencionó en algunas, pero no en todas las respuestas anteriores.

Detalles de la experiencia personal para apoyar la respuesta:

Después de transferir una instalación de StarOffice5.2 de Windows 2000 a Windows 7, recibía errores de espacio en la memoria al terminar la suite. Esto no se veía en Windows 2000.

Hace años, escribí archivos por lotes para hacer una copia de seguridad y restaurar automáticamente el archivo soffice.ini, para permitir una reparación cuando se corrompe (a menudo es un problema - la suite no se carga). Sin embargo, la copia de seguridad automática (activada por un enlace al archivo por lotes, colocado en Office52\config\startup) sólo se produce después de un retraso de 5 segundos. Me di cuenta de que siempre que salía de la suite justo antes de que se ejecutara el archivo por lotes, la terminación de la suite se producía sin errores. Esto me señaló un problema en los archivos por lotes.

Después de colocar el comando ‘EXIT’ como última línea en los archivos por lotes, la suite ofimática comenzó a terminar sin mensajes de error de espacio de memoria, en todo momento, se hayan ejecutado o no los archivos por lotes.

2
2
2
2010-11-06 03:27:04 +0000

Yo estaba lidiando con el mismo problema, y finalmente se resolvió después de hacer lo que parecían ser cambios aleatorios en el archivo por lotes - no entiendo por qué, pero lo voy a publicar aquí en caso de que ayude a alguien más tarde.

Hago uso de la utilidad SysInternals Pskill y la utilidad sleep ya que XP Home no incluye mucho en términos de funcionalidad de línea de comandos.

  • *

Este es el archivo por lotes que realmente se cierra después de que haya terminado:

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit
  • *

Si tuviera las últimas líneas cambiadas así, la ventana de cmd se mantendría abierta hasta que hiciera clic en la ‘X’ de la esquina:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit
  • *

Incluso cuando intentara invocar a pskill para que se suicidara, el proceso cmd.exe desaparecería del Administrador de Tareas, y pskill informaría desde dentro de su cmd. exe que el proceso cmd.exe había sido eliminado, pero la ventana cmd.exe seguía en pie hasta que yo hacía clic en la ‘X’ de la esquina:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

Después de añadir && exit a cada línea, me di cuenta de que algunos de ellos respondían a ella e interrumpían el procesamiento por lotes, mientras que otros no lo hacían.

Así que simplemente puse uno de los que respondían al final en lugar de como lo tenía originalmente.

Como he dicho, no sé por qué, pero me alegro de que esto haya terminado.

2
2
2
2010-09-25 04:29:25 +0000

Una vez que la aplicación ha terminado, debería salir. ¿Estás seguro de que la aplicación Java está saliendo correctamente?

1
1
1
2010-09-25 04:51:34 +0000

Inténtalo:

cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

0
0
0
2015-10-16 12:53:17 +0000

Windows 2003 no tiene “Cuentas de Usuario” en el Panel de Control por defecto. Escribí un breve lote para abrir las Cuentas de Usuario:

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

Funcionó bien, las Cuentas de Usuario se abrieron, pero la ventana de CMD permaneció abierta también. Después de investigar un poco aquí, añadí: START “” al principio de la línea 2 así:

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

Ahora la ventana de Cuentas de Usuario se abre, permanece abierta y la ventana de CMD se cierra. Muy fácil.

0
0
0
2016-01-01 06:06:20 +0000

He estado buscando y buscando una solución para cerrar una ventana de archivo por lotes cuando el comando EXIT deja la ventana abierta por una razón desconocida. Finalmente he dado con una solución.

Eliminar EXIT del final del archivo por lotes y utilizar:

Taskkill /IM conhost.exe /F
0
0
0
2016-07-15 10:37:30 +0000

He creado un archivo por lotes de uso de red en una máquina Windows 7 de 32 bits y el cmd del archivo por lotes no sale después de la ejecución. Ejecuto el mismo archivo por lotes en otra máquina Windows 7 de 64 bits y los cmd del archivo por lotes salen normalmente.

Probé con la sugerencia de Bryan y no funciona en esa máquina Windows 7 de 32 bits porque no había ningún proceso conhost.exe así que lo modifiqué de la siguiente manera:

Taskkill /IM cmd.exe /F

El archivo batch de net use no siempre sale normalmente y muestra la confirmación “Terminate batch job (S/N)” al azar.

De acuerdo con este hilo He modificado el archivo batch de la siguiente manera:

@echo off

if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

net use \Server\folder

Taskkill /IM cmd.exe /F

El archivo batch de uso de red eventualmente sale normalmente.

0
0
0
2014-06-21 17:43:16 +0000

Así es como lo hice:

  1. Crear un archivo batch con el siguiente contenido:

  2. Dentro de su flujo de entrada de salida, añadir: