获取Windows Terminal打开标签页列表及Windows 11下独立启动cmd.exe的方法问询
我来帮你解决这两个困扰的问题,刚好之前做批处理脚本时遇到过类似的场景:
一、获取Windows Terminal标签页的标题列表
由于Windows Terminal是多标签宿主进程,tasklist只能识别到主进程WindowsTerminal.exe,无法直接获取每个标签的标题。这里推荐两种可行的方法:
方法1:PowerShell结合UI自动化脚本
Windows系统自带UI自动化组件,可以通过它遍历Windows Terminal的标签控件来获取标题。打开PowerShell,运行以下脚本即可:
Add-Type -AssemblyName UIAutomationClient # 获取Windows Terminal的主窗口句柄 $terminalHandle = (Get-Process WindowsTerminal | Where-Object { $_.MainWindowHandle -ne 0 }).MainWindowHandle if (-not $terminalHandle) { Write-Host "未找到运行中的Windows Terminal窗口" exit } $terminalWindow = [System.Windows.Automation.AutomationElement]::FromHandle($terminalHandle) # 定位标签栏控件 $tabControl = $terminalWindow.FindFirst( [System.Windows.Automation.TreeScope]::Descendants, [System.Windows.Automation.PropertyCondition]::new( [System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Tab ) ) # 遍历所有标签并输出标题 $tabs = $tabControl.FindAll( [System.Windows.Automation.TreeScope]::Children, [System.Windows.Automation.PropertyCondition]::new( [System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::TabItem ) ) foreach ($tab in $tabs) { Write-Host "标签标题: $($tab.Current.Name)" }
这个脚本会自动识别当前运行的Windows Terminal窗口,列出所有标签的标题,不需要额外安装工具。
方法2:通过子进程命令行间接判断
每个Terminal标签对应一个子进程(比如cmd.exe、powershell.exe),你可以通过以下命令查看子进程的命令行参数,间接判断标签对应的任务,但这种方法无法直接获取标签的自定义标题,仅适用于没有修改过标题的场景:
wmic process where name='cmd.exe' get commandline,processid
二、Windows 11下不修改默认终端,独立启动cmd.exe
Windows 11默认把Windows Terminal设为默认控制台宿主,但你可以通过以下方法强制启动独立的传统cmd窗口,无需修改系统默认设置:
命令行快速启动:在任意控制台(包括Terminal内的cmd/PowerShell)运行以下命令,会直接弹出独立的cmd窗口:
start "" cmd.exe原理是
start命令会调用传统的控制台启动逻辑,绕过默认终端设置。创建快捷方式启动:右键桌面→新建→快捷方式,目标填写
C:\Windows\System32\cmd.exe,然后右键快捷方式→属性→选项标签,勾选「使用旧版控制台」(若看不到该选项,可先开启系统的开发者模式),双击这个快捷方式就能打开独立的cmd窗口。批处理脚本内调用写法:如果你在批处理脚本里需要调用独立cmd,也可以用:
cmd.exe /c start cmd.exe效果和上面的
start命令完全一致。
补充说明
你之前遇到的tasklist无法显示Terminal内cmd标题的问题,是因为Windows Terminal作为宿主接管了子进程的窗口渲染,子进程的实际窗口处于隐藏状态,所以tasklist只能识别到子进程的PID,但无法获取窗口标题,这是Windows Terminal的设计特性,无法通过tasklist本身解决。
备注:内容来源于stack exchange,提问作者Mark Deven




