La ventana CMD no se cerrará si la carpeta se cierra durante la ejecución del archivo bat

17

Tengo una máquina virtual Server 2012 R2 Standard de 64 bits que está actuando de manera extraña. Los archivos bat funcionan bien y la ventana CMD se cierra normalmente; pero si la carpeta que contiene el archivo bat se cierra durante la ejecución del archivo bat, finalizará pero la ventana CMD no se cierra. He simplificado esto hasta el punto de tener el archivo bat más simple posible. Contiene 1 línea. pausa

  1. Abra la carpeta que contiene el archivo bat con el Explorador de Windows
  2. Inicie el archivo bat haciendo doble clic en él
  3. Cerrar la ventana del Explorador de Windows
  4. Presione cualquier tecla en la ventana CMD
  5. El cursor se mueve a la siguiente línea cuando finaliza el archivo bat
  6. La ventana CMD permanece

Esto solo ocurre en una máquina. ¿Alguien sabe por qué podría ser esto? Es una máquina virtual de prueba y quizás debería reconstruirse, pero me da curiosidad. Gracias

Reemplacé mi archivo bat simple con uno que contiene lo siguiente:

@assoc .bat
@for /F "tokens=1,* delims==" %%G in ('assoc .bat') do @ftype %%H
@reg query "HKLM\Software\Microsoft\Command Processor" /v AutoRun 2>NUL
@reg query "HKCU\Software\Microsoft\Command Processor" /v AutoRun 2>NUL
@wmic process where "caption = 'cmd.exe'" get CommandLine, ParentProcessId,     ProcessID
@echo please close Windows Explorer before continuing
@pause
@wmic process where "caption = 'cmd.exe'" get CommandLine, ParentProcessId,     ProcessID
@pause

Los resultados se muestran a continuación:

.bat=batfile
batfile="%1" %*



CommandLine                                      ParentProcessId  ProcessId
C:\Windows\system32\cmd.exe /c ""D:\test.bat" "  1608             8460

please close Windows Explorer before continuing
Press any key to continue . . .
CommandLine                                      ParentProcessId  ProcessId
C:\Windows\system32\cmd.exe /c ""D:\test.bat" "  1608             8460

Press any key to continue . . .

Línea de comando

13/04/2016 Descubrí un poco más mirando el Administrador de tareas mientras hacía esto. Cuando inicio el archivo bat, aparecen 2 líneas en el Administrador de tareas: ventana Detalles ... 1 para cmd.exe y 1 para conhost.exe. Cuando el bate termina cmd.exe desaparece, pero conhost.exe permanece. Otra cosa que noté es que realmente no tiene que salir de la carpeta del Explorador de Windows como dije anteriormente ... todo lo que tiene que hacer es hacer clic en cualquier lugar de la ventana del Explorador. Si no hago clic en ninguna parte de la ventana del Explorador, la ventana de CMD para el archivo bat se cierra normalmente y ambas tareas desaparecen de la ventana de detalles como era de esperar.

RGuggisberg
fuente
2
Lamentablemente no puedo ayudar. Pero tengo que complementarlo para proporcionar una pregunta bien escrita que describa con precisión su problema, desearía que más carteles por primera vez se tomaran el tiempo para escribir una pregunta bien escrita como esta. Por supuesto, no puedo reproducir el comportamiento en mi máquina Win 10. Y dado que solo ve el comportamiento en una máquina específica, puede ser difícil para cualquier persona diagnosticar lo que está sucediendo.
dbenham
Gracias @dbenham. Respeto su conocimiento y la sabiduría que dispensa en SO bajo la etiqueta de archivo por lotes. Así que soy un póster por primera vez aquí en Super User pero sé lo que quieres decir con los nuevos pósters. Sí, estoy de acuerdo en que no es probable que alguien pueda duplicar ... solo esperando que alguien más haya encontrado esto. Es solo una máquina virtual de prueba, por lo que no es crítica. Solo me gustaría saber qué es en caso de que ocurra en la máquina de un cliente.
RGuggisberg
1
@RGuggisberg: asegúrese de fusionar sus cuentas para poder editar sus propias preguntas. No tiene que agregar indicaciones de que editó su pregunta, el sistema lo hace por usted, completamente innecesario.
Ramhound
1
También tuve el mismo problema en una de mis máquinas virtuales, como solución alternativa he mencionado explícitamente el exitcomando para cerrar la ventana de CMD. Puede ser que esto pueda ayudar.
manjesh23
1
¿Ha probado la función Analizar cadena de espera de Resource Monitor para determinar en qué aplicación está esperando el proceso ConHost.exe?
Xtremity

Respuestas:

1

Esto es poco probable, pero parece haber descartado todas las cosas probables. Verifique las siguientes dos entradas de registro para ver si contienen algo:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

o

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Cualquier cosa allí se llamará cada vez que ejecute un archivo por lotes y, si lo tiene cmd /k, provocaría este comportamiento.

Argonautas
fuente
Gracias ... eso tampoco lo es. Es solo una máquina de prueba, así que ya no estoy tratando de resolverlo.
RGuggisberg
0

¿Has probado esto?

@echo off
rem some code
pause
cls
exit

Lo mismo, pero permite lo mismo que pausa y sale solo.

Además, ¿por qué pones la @ delante de todo? ¿Por qué no usar @echo off antes que el resto de los comandos?

qq410219243
fuente
Sí ... ya lo intenté. Acuerde el prefacio @. Típicamente eso es lo que hago. No importa para esto. Probablemente tenía eso allí para algunas pruebas iniciales para ver los comandos.
RGuggisberg