Окно CMD не закроется, если папка будет закрыта во время выполнения файла bat

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

RGuggisberg
источник
2
К сожалению, я не могу помочь. Но я должен дополнить вас предоставлением хорошо написанного вопроса, который точно описывает вашу проблему, я хотел бы, чтобы больше постеров впервые нашли время, чтобы написать хорошо написанный вопрос, подобный этому. Конечно, я не могу воспроизвести поведение на моей машине Win 10. А поскольку вы видите поведение только на одной конкретной машине, кому-то может быть сложно диагностировать происходящее.
декабря
Спасибо @dbenham. Я уважаю ваши знания и мудрость, которыми вы пользуетесь на SO под тегом batch-file. Так что я здесь впервые на Super User, но знаю, что вы имеете в виду под новыми постерами. Да, я согласен, что маловероятно, что кто-то может дублировать ... просто надеясь, что, возможно, кто-то еще столкнулся с этим. Это просто тестовая виртуальная машина, поэтому она не критична. Просто хотелось бы узнать, что это на тот случай, если это когда-нибудь произошло на машине клиента.
Р.Гуггисберг
1
@Rugugisberg - убедитесь, что вы объединяете свои учетные записи, чтобы вы могли редактировать свои собственные вопросы. Вам не нужно добавлять указания, что вы редактировали свой вопрос, система сделает это за вас, совершенно ненужно.
Ramhound
1
У меня также была такая же проблема на одной из моих виртуальных машин, в качестве обходного пути я явно упомянул exitкоманду для закрытия окна CMD. Может быть, это может помочь.
manjesh23
1
Вы пробовали использовать функцию анализа цепочки ожидания в Resource Monitor, чтобы определить, в каком приложении ожидает процесс ConHost.exe?
Xtremity

Ответы:

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 перед остальными командами?

qq410219243
источник
Да .. уже пробовал это. Согласитесь на @ предисловие. Как правило, это то, что я делаю. Не имеет значения для этого. Вероятно, это было для начального тестирования, чтобы увидеть команды.
Р.Гуггисберг