如果在执行bat文件的过程中关闭了文件夹,则CMD窗口不会关闭


17

我有一个运行异常的Server 2012 R2 Standard 64位虚拟机。蝙蝠文件工作正常,CMD窗口正常关闭;但是,如果在执行bat文件的过程中关闭了包含bat文件的文件夹,它将完成,但CMD窗口不会关闭。我已经简化了这一点,使其具有最简单的bat文件。它包含1行。暂停

  1. 使用Windows资源管理器打开包含bat文件的文件夹
  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 . . .

命令行

2016年4月13日,我确实通过查看任务管理器了解了更多信息。当我启动bat文件时,“任务管理器-详细信息”窗口中将出现2行... cmd.exe的1行和conhost.exe的1行。蝙蝠完成后,cmd.exe消失,但是conhost.exe保留。我注意到的另一件事是,您实际上不必像我之前所说的那样退出Windows资源管理器文件夹...您所要做的只是单击资源管理器窗口中的任何位置。如果未在“资源管理器”窗口中单击任何位置,则bat文件的CMD窗口将正常关闭,并且两个任务将从详细信息窗口中消失,这与我们期望的一样。


2
不幸的是我无能为力。但是,在提供一个准确描述您的问题的书面问题时,我必须给予补充,我希望更多的海报发布者花时间来写一个这样的书面问题。当然,我无法在Win 10机器上重现该行为。而且,由于您只看到一台特定计算机上的行为,因此任何人都可能难以诊断正在发生的情况。
dbenham '16

谢谢@dbenham。我尊重您的知识和您在批处理文件标签下在SO上的智慧。所以我是超级用户第一次来这里,但我知道您对新海报的意思。是的,我同意别人不可能重复...只是希望别人可能遇到过这种情况。它只是一个测试虚拟机,因此并不重要。只是想知道如果在客户的机器上发生过什么是什么。
RGuggisberg '16

1
@RGuggisberg-确保合并您的帐户,以便您可以编辑自己的问题。您不必添加已编辑问题的指示,系统会为您完成此操作,完全没有必要。
Ramhound

1
我的一个虚拟机上也遇到了同样的问题,这是我明确提到的exit关闭CMD窗口的一种解决方法。可能这可能有所帮助。
manjesh23 '16

1
您是否尝试过使用资源监视器的“分析等待链”功能来确定ConHost.exe进程正在等待哪个应用程序?
Xtremity '16

Answers:


1

这不太可能,但是您似乎已经排除了所有可能的情况。检查以下两个注册表项以查看它们是否包含任何内容:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

要么

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

每次您运行批处理文件时,其中的任何内容都会被调用,如果有cmd /k,则会导致此行为。


谢谢...也不是。它只是一台测试机,所以我不再试图找出答案。
RGuggisberg,2013年

0

你有尝试过吗?

@echo off
rem some code
pause
cls
exit

相同的东西,但允许与暂停和退出本身相同。

另外,为什么还要在所有内容前面加上@?为什么不只在其余命令之前使用@echo off?


是的..已经尝试过了。同意@序言。通常这就是我要做的。对此无所谓。可能在其中进行了一些初步测试以查看命令。
RGuggisberg '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.