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

RGu*_*erg 17 batch-file windows-server-2012

我有一台运行异常的 Server 2012 R2 标准 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
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

.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 . . .
Run Code Online (Sandbox Code Playgroud)

命令行

04/13/2016 在执行此操作时,我确实通过查看任务管理器发现了更多信息。当我启动 bat 文件时,任务管理器 - 详细信息窗口中出现 2 行... cmd.exe 1 行,conhost.exe 1 行。当 bat 完成时 cmd.exe 消失,但 conhost.exe 仍然存在。我注意到的另一件事是,您实际上不必像我之前所说的那样退出 Windows 资源管理器文件夹……您所要做的就是单击资源管理器窗口中的任意位置。如果我不在资源管理器窗口中的任何位置单击,bat 文件的 CMD 窗口将正常关闭,并且两个任务都从我们预期的详细信息窗口中消失。

Arg*_*uts 1

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
Run Code Online (Sandbox Code Playgroud)

或者

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor
Run Code Online (Sandbox Code Playgroud)

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