如何从批处理文件中获取窗口标题文本

如何从批处理文件中获取窗口标题文本

我如何获取当前窗口的值title,设置如下:

TITLE Here Are The New Contents

图像

答案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

相关内容