La finestra CMD non si chiuderà se la cartella viene chiusa durante l'esecuzione del file bat


17

Ho una macchina virtuale a 64 bit standard Server 2012 R2 che agisce in modo strano. I file bat funzionano bene e la finestra CMD si chiude normalmente; ma se la cartella contenente il file bat viene chiusa durante l'esecuzione del file bat, finirà ma la finestra CMD non si chiuderà. L'ho semplificato al punto da avere il file bat più semplice possibile. Contiene 1 riga. pausa

  1. Apri la cartella contenente il file bat con Esplora risorse
  2. Avvia il file bat facendo doppio clic su di esso
  3. Chiudi la finestra di Windows Explorer
  4. Premere un tasto qualsiasi nella finestra CMD
  5. Il cursore si sposta sulla riga successiva al termine del file bat
  6. La finestra CMD rimane

Questo succede solo su una macchina. Qualcuno sa perché questo potrebbe essere? È una VM di prova e forse dovrebbe essere solo ricostruita, ma mi incuriosisce. Grazie

Ho sostituito il mio file bat semplice con uno contenente quanto segue:

@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

I risultati sono mostrati di seguito:

.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 . . .

Riga di comando

13/04/2016 Ho scoperto qualcosa in più guardando Task Manager mentre lo facevo. Quando avvio il file bat, vengono visualizzate 2 righe nella Gestione attività - Finestra Dettagli ... 1 per cmd.exe e 1 per conhost.exe. Al termine del pipistrello cmd.exe scompare, ma rimane conhost.exe. Un'altra cosa che ho notato è che non devi davvero uscire dalla cartella di Windows Explorer come ho già detto ... tutto quello che devi fare è fare clic in qualsiasi punto della finestra di Explorer. Se non clicco da nessuna parte nella finestra Explorer, la finestra CMD per il file bat si chiude normalmente ed entrambe le attività scompaiono dalla finestra dei dettagli come ci aspetteremmo.


2
Purtroppo non posso aiutare. Ma devo completarti nel fornire una domanda ben scritta che descriva con precisione il tuo problema, vorrei che altri poster per la prima volta prendessero il tempo di scrivere una domanda ben scritta come questa. Ovviamente non riesco a riprodurre il comportamento sulla mia macchina Win 10. E poiché vedi il comportamento solo su una macchina specifica, potrebbe essere difficile per chiunque diagnosticare cosa sta succedendo.
dbenham,

Grazie @dbenham. Rispetto le tue conoscenze e la saggezza che spendi su SO sotto il tag del file batch. Quindi sono un poster per la prima volta qui su Super User, ma so cosa intendi per i nuovi poster. Sì, sono d'accordo che non è probabile che qualcuno possa duplicare ... sperando solo che qualcun altro abbia riscontrato questo. È solo una VM di prova, quindi non è fondamentale. Vorrei solo sapere cosa succede nel caso in cui fosse mai successo sulla macchina di un cliente.
RGuggisberg,

1
@RGuggisberg - Assicurati di unire i tuoi account in modo da poter modificare le tue domande. Non devi aggiungere indicazioni che hai modificato la tua domanda, il sistema lo fa per te, completamente inutile.
Ramhound,

1
Ho anche avuto lo stesso problema su una delle mie macchine virtuali, come soluzione alternativa ho menzionato esplicitamente il exitcomando per chiudere la finestra CMD. Potrebbe essere questo potrebbe aiutare.
manjesh23,

1
Hai provato la funzionalità Analizza catena di attesa di Resource Monitor per determinare su quale applicazione è in attesa il processo ConHost.exe?
Xtremity,

Risposte:


1

Questo è improbabile, ma sembra che tu abbia escluso tutte le cose probabili. Controlla le seguenti due voci di registro per vedere se contengono qualcosa:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

o

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Qualsiasi cosa all'interno verrà chiamata ogni volta che si esegue un file batch e, se presente, cmd /kciò provocherebbe questo comportamento.


Grazie ... neanche quello. È solo una macchina di prova, quindi non sto più cercando di capirlo.
RGuggisberg,

0

Hai provato questo?

@echo off
rem some code
pause
cls
exit

Stesse cose, ma consente lo stesso di pausa ed esce da solo.

Inoltre, perché metti la @ davanti a tutto? Perché non usare semplicemente @echo off prima del resto dei comandi?


Sì .. già provato. Concordare sulla prefazione @. In genere è quello che faccio. Non importa per questo. Probabilmente ce l'aveva dentro per alcuni test iniziali per vedere i comandi.
RGuggisberg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.