17

У меня есть 64-разрядная виртуальная машина Server 2012 R2 Standard, которая работает странно. Файлы Bat работают нормально, и окно CMD закрывается нормально; но если папка, содержащая файл bat, будет закрыта во время выполнения файла bat, она завершится, но окно CMD не закроется. Я упростил это до такой степени, чтобы иметь самый простой файл bat. Содержит 1 строку. Пауза

  1. Откройте папку с файлом bat в проводнике Windows
  2. Запустите файл bat, дважды щелкнув по нему
  3. Закройте окно проводника Windows
  4. Нажмите любую клавишу в окне CMD
  5. Курсор перемещается на следующую строку, когда файл bat завершен
  6. Окно CMD остается

Это происходит только на одной машине. Кто-нибудь знает, почему это может быть? Это тестовая виртуальная машина, и, возможно, ее нужно просто перестроить, но мне это интересно. Спасибо

Я заменил свой простой файл 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 . . .

Командная строка

13.04.2016 Я узнал немного больше, посмотрев на Диспетчер задач при этом. Когда я запускаю bat-файл, в окне «Диспетчер задач - Подробности» появляются 2 строки: 1 для cmd.exe и 1 для conhost.exe. Когда летучая мышь заканчивается, cmd.exe уходит, но conhost.exe остается. Еще одна вещь, которую я заметил, это то, что вам на самом деле не нужно выходить из папки Windows Explorer, как я ранее говорил ... все, что вам нужно сделать, это щелкнуть в любом месте окна Explorer. Если я не нажимаю нигде в окне проводника, окно CMD для файла bat закрывается нормально, и обе задачи исчезают из окна сведений, как мы и ожидали.

2 ответа2

1

Это маловероятно, но вы, кажется, исключили все вероятные вещи. Проверьте следующие две записи реестра, чтобы увидеть, содержат ли они что-либо:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

или же

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Все, что там находится, будет вызываться каждый раз, когда вы запускаете командный файл, и если у него есть cmd /k , это вызовет такое поведение.

0

Вы пробовали это?

@echo off
rem some code
pause
cls
exit

То же самое, но позволяет так же, как пауза и выходы самостоятельно.

Кроме того, почему вы ставите @ перед всем? Почему бы просто не использовать @echo off перед остальными командами?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .