태그 보관물: batch-file

batch-file

bat 파일 실행 중 폴더가 닫히면 CMD 창이 닫히지 않습니다. Standard 64 비트 가상

이상하게 작동하는 Server 2012 R2 Standard 64 비트 가상 머신이 있습니다. 박쥐 파일이 제대로 작동하고 CMD 창이 정상적으로 닫힙니다. 그러나 bat 파일을 실행하는 동안 bat 파일이 들어있는 폴더가 닫히면 종료되지만 CMD 창이 닫히지 않습니다. 나는 가능한 가장 간단한 bat 파일을 갖기 위해 이것을 단순화했습니다. 한 줄이 들어 있습니다. 중지

  1. Windows 탐색기로 bat 파일이 들어있는 폴더를 엽니 다
  2. 박쥐 파일을 두 번 클릭하여 시작하십시오.
  3. Windows 탐색기 창을 닫습니다
  4. CMD 창에서 아무 키나 누르십시오
  5. 박쥐 파일이 완료되면 커서가 다음 줄로 이동합니다
  6. CMD 창이 유지됩니다

이것은 하나의 컴퓨터에서만 발생합니다. 이것이 왜 그런지 아는 사람이 있습니까? 테스트 VM이며 아마도 다시 빌드해야하지만 궁금합니다. 감사

간단한 bat 파일을 다음을 포함하는 파일로 교체했습니다.

@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

결과는 아래와 같습니다 :

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

커맨드 라인

2016 년 4 월 13 일 나는 이것을하는 동안 작업 관리자를보고 조금 더 알아 냈습니다. bat 파일을 시작하면 작업 관리자-세부 정보 창에 2 줄이 나타납니다. 1은 cmd.exe의 경우, 1은 conhost.exe의 경우입니다. 박쥐가 끝나면 cmd.exe는 사라지지만 conhost.exe는 남아 있습니다. 내가 알았던 또 다른 것은 이전에 언급 한 것처럼 Windows 탐색기 폴더를 실제로 종료 할 필요가 없다는 것입니다 … 탐색기 창의 아무 곳이나 클릭하면됩니다. 탐색기 창의 아무 곳이나 클릭하지 않으면 bat 파일의 CMD 창이 정상적으로 닫히고 예상대로 세부 정보 창에서 두 작업이 사라집니다.



답변

이것은 가능하지 않지만 가능한 모든 것을 배제한 것으로 보입니다. 다음 두 레지스트리 항목을 검사하여 항목이 포함되어 있는지 확인하십시오.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

또는

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

배치 파일을 실행할 때마다 거기에있는 모든 것이 호출되며, 파일 cmd /k이 있으면이 동작이 발생합니다.


답변

이것을 시도 했습니까?

@echo off
rem some code
pause
cls
exit

똑같은 것이지만 일시 정지와 동일하게 허용됩니다.

또한 왜 @를 모든 것 앞에 두는가? 나머지 명령 전에 @echo를 사용하지 않는 이유는 무엇입니까?


답변