在 cmd.exe 中,您可以使用以下命令按 PID 和窗口标题列出当前正在运行的窗口:
tasklist /fi "imagename eq cmd.exe" /fo list /v
但是,如果 cmd 在 Windows 终端应用程序中运行,这将不起作用。它列出了 PID 但没有显示为“N/A”的标题。由于 Windows 11 强制您始终使用终端,这破坏了许多使用任务列表进行自我识别或识别其他应用程序的批处理应用程序。
有没有办法获取当前打开的 Windows 终端选项卡及其标题的列表?或者,有没有办法在不更改默认设置的情况下在 Windows 11 的 Windows 终端之外启动 cmd.exe?
我试过了tasklist /fi "imagename eq WindowsTerminal.exe" /fo list /v
,但它只列出了一个没有标签标题的窗口。
新的启动方式
此方法启动任何程序并获取 PID,理想情况下应该是向前发展的标准:
在批处理文件中自我识别 PID
虽然这不会让您识别其他批处理文件的 PID,但此方法允许批处理文件自行识别其 PID:
(请注意,必须使用临时文件,因为当命令在 for 循环中运行时,for 循环成为父进程)。
在传统的 Conhost.exe 中启动批处理文件
您还可以在传统窗口中启动 cmd.exe 窗口,这将向后兼容其他方法。
cmd.exe 不是 Windows 终端取代的原始模拟器。cmd.exe 是在模拟器中运行的命令处理器。传统的模拟器是 conhost.exe。
因此,您可以直接在 conhost 中运行批处理文件或 cmd.exe:
您可以使用 VBScript 在后台启动批处理文件,如下所示:
这仍然在传统的 conhost.exe 实例中运行它并与任务列表一起使用。
错误报告给微软
我还添加了一个问题报告到反馈中心“Windows Terminal Blocks tasklist from seeing cmd.exe window titles [Breaks Batch Files]”
使用 PowerShell,您可以通过以下方式获取 ID:
假设您只想列出
cmd
选项卡。适用于 Windows 11 中的 Windows 终端进程。Windows 标题似乎是空的,可能是因为它们是子进程,通常不能作为单独的窗口工作,因为它们是选项卡。