如果在执行 bat 文件期间关闭文件夹,CMD 窗口将不会关闭

如果在执行 bat 文件期间关闭文件夹,CMD 窗口将不会关闭

我有一台 Server 2012 R2 Standard 64 位虚拟机,它的行为很奇怪。bat 文件工作正常,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 行... 1 行是 cmd.exe,1 行是 conhost.exe。当 bat 完成后,cmd.exe 消失,但 conhost.exe 仍然存在。我注意到的另一件事是,您实际上不必像我之前所说的那样退出 Windows 资源管理器文件夹... 您所要做的就是单击资源管理器窗口中的任意位置。如果我没有单击资源管理器窗口中的任意位置,bat 文件的 CMD 窗口将正常关闭,并且两个任务都会从详细信息窗口中消失,正如我们预期的那样。

答案1

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

或者

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

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

答案2

你尝试过这个吗?

@echo off
rem some code
pause
cls
exit

同样的事情,但允许相同的暂停并自行退出。

另外,为什么你要把 @ 放在所有命令前面?为什么不在其余命令之前使用 @echo off?

相关内容