Окно 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 закрывается нормально, и обе задачи исчезают из окна сведений, как мы и ожидали.


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


Да .. уже пробовал это. Согласитесь на @ предисловие. Как правило, это то, что я делаю. Не имеет значения для этого. Вероятно, это было для начального тестирования, чтобы увидеть команды.
— Р.Гуггисберг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.