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

17

Eu tenho uma máquina virtual de 64 bits do Servidor 2012 R2 Standard 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 estiver fechada durante a execução do arquivo bat, ele terminará, mas a janela do CMD não será fechada. Eu simplifiquei isso ao ponto de ter o arquivo bat mais simples possível. Contém 1 linha. pausar

  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 do CMD
  5. O cursor se move para a próxima linha quando o arquivo bat terminar
  6. janela CMD permanece

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

Eu substituí meu arquivo bat simples por um contendo 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 . . .

CommandLine

13/04/2016 Eu descobri um pouco mais olhando o Gerenciador de Tarefas enquanto fazia isso. Quando eu inicio o arquivo bat 2 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. Uma outra coisa que notei é que você realmente não precisa sair da pasta do Windows Explorer como eu disse anteriormente ... tudo que você precisa fazer é clicar em qualquer lugar na janela do Explorer. Se eu não clicar em qualquer lugar na janela do Explorer, a janela do CMD para o arquivo bat é fechada normalmente e ambas as tarefas desaparecem da janela de detalhes como seria de esperar.

    
por RGuggisberg 08.04.2016 / 22:41

2 respostas

1

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

ou

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Qualquer coisa ali será chamada toda vez que você executar um arquivo em lote e se tiver cmd /k que causaria esse comportamento.

    
por 05.05.2016 / 21:42
0

Você já tentou isso?

@echo off
rem some code
pause
cls
exit

Mesmas coisas, mas permite o mesmo que pausar e sai sozinho.

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

    
por 15.05.2016 / 20:43