You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

获取Windows Terminal打开标签页列表及Windows 11下独立启动cmd.exe的方法问询

获取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.exepowershell.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

火山引擎 最新活动