![如何从批处理文件中获取窗口标题文本](https://linux22.com/image/1515626/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E8%8E%B7%E5%8F%96%E7%AA%97%E5%8F%A3%E6%A0%87%E9%A2%98%E6%96%87%E6%9C%AC.png)
答案1
没有内置任何内容,但您可以从tasklist
命令中检索它。
tasklist /fi "imagename eq cmd.exe" /fo list /v
答案2
在 cmd.exe (通常的命令行提示符)中:
设置窗口的标题:
title "Your New Title"
获取窗口的标题:我没有发现任何有用的东西可以做这样的事情,但是如果你对 C# 或 Visual Basic 有一些了解,你可以开发一个小程序,它将在打开的窗口中查找你的命令行并为你返回标题。(使用父进程的 PID(你的 cmd.exe))
在 Powershell 中:(这里事情很简单)
设置窗口的标题:
[system.console]::title = "Your New Title"
获取窗口的标题:
$myTitleVar = [system.console]::title
或者直接输出:
[system.console]::title
答案3
调用 PowerShell通过 CLI 从批处理文件中powershell.exe
, 是最容易:
:: Outputs the window title.
powershell -noprofile -c [Console]::Title | findstr .
笔记:
[Console]::Title
使用返回当前控制台窗口的标题System.Console
.NET 类;PowerShell 提供对全部.NET 类型。该
findstr .
命令是假的命令,这是必要的,以防止输出包含后缀- <command-line>
,因为cmd.exe
在命令行执行时会将这样的后缀附加到窗口标题(<command-line>
此处表示调用的特定命令行)。
附加后缀不会不是如果发生管道(|
) 被使用,因此添加| findstr .
exe - 只是传递(非空)输出 - 足以防止后缀显示在结果中。
完整示例这表明如何捕捉标题多变的:
@echo off & setlocal
:: Assign a custom title.
title This ^& That
:: Retrieve the current title and store it var. %thisTitle%
for /f "delims=" %%t in (
'powershell -noprofile -c [Console]::Title ^| findstr .'
) do set thisTitle=%%t
echo This window's title: "%thisTitle%"
以上结果:
This window's title: "This & That"
wmic
通过和更麻烦的替代方案tasklist
:
笔记:
这原料对于这个解决方案AtomicFireball 的答案并对其发表评论,但如何将它们组合在一起可能并不明显。下面的代码就是这样做的。
如您所见,与 PowerShell 解决方案相比,该解决方案要复杂得多;请注意,使用
powershell.exe
(-c
)-Command
参数是不是受制于臭名昭著的 PowerShell执行策略,因此不必担心使用 PowerShell 执行此任务。
完整示例(与上面相同的输出):
:: Assign a custom title.
title This ^& That
:: Find the PID (process ID) of this cmd.exe session.
:: Note: A *temporary file* is required to capture the command output,
:: for later parsing. A `for /f` command cannot be used DIRECTLY
:: because it would execute the command in a *child* cmd.exe process,
:: which would report the wrong PID.
:: Get a path for a temporary file.
set TEMPFILE=~getpid_%DATE%%TIME%.txt
set TEMPFILE=%TEMPFILE:/=%
set TEMPFILE=%TEMPFILE::=%
set TEMPFILE=%TEMP%\%TEMPFILE: =%
WMIC process get Name,ParentProcessId | findstr "^WMIC\.exe" > "%TEMPFILE%"
for /f "tokens=2" %%i in (%TEMPFILE%) do set PID=%%i
del "%TEMPFILE%"
:: Now use the PID to look up process details, which includes the window title.
for /f "tokens=1,* delims=:" %%i in (
'tasklist /fi "PID eq %PID%" /fo list /v ^| findstr "^Window Title:'
) do set thisTitle=%%j
:: Trim the leading space:
for /f "tokens=*" %%i in ("%thisTitle%") do set thisTitle=%%i
echo This window's title: "%thisTitle%"
答案4
powershell(Get-WmiObject Win32_Process -Filter ProcessId=$PID).ParentProcessId