Вікно CMD не закриється, якщо папка закрита під час виконання файлу bat


17

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

  1. У Windows Explorer відкрийте папку, що містить файл bat
  2. Запустіть файл bat, двічі клацнувши на ньому
  3. Закрийте вікно Провідника Windows
  4. Натисніть будь-яку клавішу у вікні CMD
  5. Після закінчення файлу bat курсор переходить до наступного рядка
  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 . . .

Командний рядок

13.04.2016 я дізнався трохи більше, переглянувши диспетчера завдань, роблячи це. Коли я запускаю файл bat, у вікні диспетчера задач з'являються 2 рядки ... 1 для cmd.exe і 1 для conhost.exe. Коли кажан закінчується, cmd.exe відходить, але conhost.exe залишається. Ще одне, що я помітив, це те, що вам не потрібно виходити з папки Провідника Windows, як я вже зазначив ... все, що вам потрібно зробити, це натиснути будь-де у вікні Провідника. Якщо я не натискаю ніде у вікні Провідника, вікно CMD для файла bat закривається нормально, і обидві завдання зникають із вікна деталей, як ми очікували.


2
На жаль, я не можу допомогти. Але я маю доповнити вас щодо надання чітко написаного питання, яке точно описує вашу проблему, я б хотів, щоб більше плакатів вперше зайняло час, щоб написати добре написане запитання, як це. Звичайно, я не можу відтворити поведінку на своїй машині Win 10. А оскільки ви бачите поведінку лише на одній конкретній машині, комусь може бути важко діагностувати, що відбувається.
dbenham

Дякую @dbenham. Я поважаю ваші знання та мудрість, яку ви віддаєте на SO під тегом batch-file. Тож я вперше плакат тут на Super User, але я знаю, що ви маєте на увазі про нові плакати. Так, я погоджуюся, малоймовірно, що хтось може дублювати ... просто сподіваючись, що, можливо, хтось ще зіткнувся з цим. Це просто тестовий VM, тому він не є критичним. Просто хотілося б знати, що це таке, якщо це коли-небудь траплялося на машині замовника.
RGuggisberg

1
@RGuggisberg - обов'язково з’єднайте свої акаунти, щоб ви могли редагувати власні запитання. Вам не потрібно додавати вказівки, що ви редагували своє запитання, система робить це для вас, абсолютно непотрібним.
Рамхаунд

1
У мене також був такий самий випуск на одному з моїх віртуальних машин, як вирішення явно згадував exitкоманду закрити вікно CMD. Це може допомогти.
меншеsh23

1
Ви спробували функцію Аналіз ланцюга очікування Resource Monitor, щоб визначити, яку програму очікує процес ConHost.exe?
Xtremity

Відповіді:


1

Це малоймовірно, але, здається, ви виключили всі ймовірні речі. Перевірте наступні дві записи реєстру, щоб побачити, чи містять вони щось:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

або

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Все, що там, буде викликано щоразу, коли ви запустите пакетний файл, і якщо він має cmd /k, це спричинило б таку поведінку.


Спасибі ... це теж не так. Це просто тестова машина, тому я більше не намагаюся це зрозуміти.
RGuggisberg

0

Ви пробували це?

@echo off
rem some code
pause
cls
exit

Те саме, але дозволяє те ж саме, що пауза та вихід сам по собі.

Крім того, чому ви ставите @ перед усім? Чому б просто не використовувати @echo off перед рештою команд?


Так .. вже пробував це. Погодьтеся на передмові @. Як правило, це я і роблю. Не має для цього значення. Напевно, було там для початкового тестування, щоб побачити команди.
RGuggisberg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.