A janela CMD não será fechada se a pasta for fechada durante a execução do arquivo bat


17

Eu tenho uma máquina virtual Server 2012 R2 Standard de 64 bits que está agindo de forma estranha. Os arquivos bat funcionam bem e a janela do CMD fecha normalmente; mas se a pasta que contém o arquivo bat for fechada durante a execução do arquivo bat, ela será concluída, mas a janela do CMD não fechará. Eu simplifiquei isso a ponto de ter o arquivo bat mais simples possível. Contém 1 linha. pausa

  1. Abra a pasta que contém o arquivo bat com o Windows Explorer
  2. Inicie o arquivo bat clicando duas vezes nele
  3. Feche a janela do Windows Explorer
  4. Pressione qualquer tecla na janela CMD
  5. O cursor se move para a próxima linha quando o arquivo bat for concluído
  6. A janela CMD permanece

Isso acontece apenas em uma máquina. Alguém sabe por que isso pode ser? É uma VM de teste e talvez deva ser reconstruída, mas isso me deixa curioso. obrigado

Substituí meu arquivo bat simples por um que contenha o seguinte:

@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

Os resultados são mostrados abaixo:

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

Linha de comando

13/04/2016 Eu descobri um pouco mais olhando o Gerenciador de tarefas enquanto fazia isso. Quando inicio o arquivo bat, duas linhas aparecem na janela Gerenciador de tarefas - Detalhes ... 1 para cmd.exe e 1 para conhost.exe. Quando o bastão termina, o cmd.exe desaparece, mas o conhost.exe permanece. Outra coisa que notei é que você realmente não precisa sair da pasta Windows Explorer, como afirmei anteriormente ... tudo o que você precisa fazer é clicar em qualquer lugar da janela do Explorer. Se eu não clicar em nenhum lugar da janela do Explorer, a janela CMD do arquivo bat será fechada normalmente e as duas tarefas desaparecerão da janela de detalhes, como seria de esperar.


2
Infelizmente não posso ajudar. Mas tenho que complementá-lo por fornecer uma pergunta bem escrita que descreva com precisão o seu problema. Desejo que mais pôsteres da primeira vez tenham tempo para escrever uma pergunta bem escrita como esta. É claro que não consigo reproduzir o comportamento na minha máquina Win 10. E como você vê apenas o comportamento em uma máquina específica, pode ser difícil para alguém diagnosticar o que está acontecendo.
dbenham

Obrigado @dbenham. Eu respeito o seu conhecimento e a sabedoria que você dispensa do SO sob a tag de arquivo em lote. Então, eu sou o primeiro pôster aqui no Superusuário, mas eu sei o que você quer dizer com novos pôsteres. Sim, concordo que não é provável que alguém possa duplicar ... apenas esperando que talvez alguém tenha encontrado isso. É apenas uma VM de teste, portanto não é crítica. Gostaria apenas de saber o que é, caso isso aconteça na máquina de um cliente.
RGuggisberg 9/04

1
@RGuggisberg - Não deixe de mesclar suas contas para poder editar suas próprias perguntas. Você não precisa adicionar indicações de que editou sua pergunta, o sistema faz isso por você, completamente desnecessário.
Ramhound

1
Eu também tive o mesmo problema em uma das minhas VMs, como uma solução alternativa que mencionei explicitamente o exitcomando para fechar a janela do CMD. Pode ser que isso possa ajudar.
precisa saber é o seguinte

1
Você já tentou o recurso Analyze Wait Chain do Resource Monitor para determinar em qual aplicativo o processo ConHost.exe está aguardando?
Xtremity

Respostas:


1

Isso é improvável, mas você parece ter descartado todas as coisas prováveis. Verifique as duas entradas de registro a seguir para ver se elas contêm alguma coisa:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

ou

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Qualquer coisa lá dentro será chamada toda vez que você executar um arquivo em lotes e, se houver cmd /k, causaria esse comportamento.


Obrigado ... não é isso também. É apenas uma máquina de teste, então não estou mais tentando descobrir.
RGuggisberg 5/05

0

Você já tentou isso?

@echo off
rem some code
pause
cls
exit

Mesmas coisas, mas permite o mesmo que pausar e sair por si só.

Além disso, por que você está colocando o @ na frente de tudo? Por que não usar @echo off antes do restante dos comandos?


Sim .. já tentei isso. Concorde com o prefácio @. Normalmente é isso que eu faço. Não importa para isso. Provavelmente tinha isso lá para alguns testes iniciais para ver comandos.
RGuggisberg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.