如何设置以逗号、分号或等号开头的标题?
How can I set a title that starts with comma, semicolon or equal sign?
显然可以设置包含 cmd 标准分隔符的标题,但是通过 TITLE
命令看起来不可能设置以分隔符开头的标题。
可以用这样的标题创建一个新的 CMD 实例:
start "==" cmd.exe
但不能用于同一实例。
.NET 和 Console.Title
属性 也可以,但是当从批处理文件调用时,只要编译的 exe 运行,磁贴就会持续:
@if (@X)==(@Y) @end /* JScript comment
@echo off
setlocal
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
set "jsc=%%v"
)
if not defined jsc (
echo !!! Installation of .NET framework needed !!!
pause
exit /b 3
)
rem echo %jsc%
::if not exist "%~n0.exe" (
del /q /f %~n0.exe
call "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
::)
call %~n0.exe %*
endlocal & exit /b %errorlevel%
*/
import System;
var arguments:String[] = Environment.GetCommandLineArgs();
//Console.WriteLine(Console.Title);
if (arguments.length>0){
Console.Title=arguments[1];
}
//Console.WriteLine(Console.Title);
(可能通过代码注入是可能的)
有windows'native'方法吗?
使用 Win7 x64,我可以在有问题的字符前面换行时生成它。
@echo off
setlocal EnableDelayedExpansion
set LF=^
title !LF!,bc
在Win7中,使用LF时,标题的高度或位置似乎没有差异。
测试
cmd /V:on
@for /L %n in (1 1 1111) do @(title !LF!=Hello& title +Hello)
但是当前程序在标题中显示为 运行 的时间,因此 TITLE
命令本身会产生闪烁。
我找到了另一种方法:
title ^A,string
其中 ^A
是通过在按住 ALT
键 ( <pressALT><0><1><releaseALT>
) 的同时输入 0
1
来生成的。
您可以使用 echo ^A>>batch.bat
将其放入文件中,然后使用记事本将其移动到正确的位置(它不会在记事本中显示,例如白色space;比 space, 但不像 TAB 那样宽泛)
LF
是问题的答案,但也有解决方法。我想我已经检查了所有的 ASCII 字符,看起来 FS and GS 字符没有显示在命令提示符的标题中(这里有一个 FS
的例子):
@echo off
setlocal
::dbenham's hexprint was used here
::http://www.dostips.com/forum/viewtopic.php?p=23888
::Define a Linefeed variable
set LF=^
::above 2 blank lines are critical - do not remove.
::Create a FS variable
call :hexprint "0x1C" FS
title %FS%=;=
exit /b
:hexPrint string [rtnVar]
for /f eol^=^%LF%%LF%^ delims^= %%A in (
'forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(%~1"'
) do if "%~2" neq "" (set %~2=%%A) else echo(%%A
exit /b
但这不是 'perfect' 解决方案,因为 AppActivate 或 Tasklist 命令将检测 FS
和GS
个字符(LF
没有这样的问题)。
也可以使用 SOH
字符,但显示为 space.
FS也可以ctrl+制作
GS 与 ctrl+\
按 ctrl+A 的 SOH
显然可以设置包含 cmd 标准分隔符的标题,但是通过 TITLE
命令看起来不可能设置以分隔符开头的标题。
可以用这样的标题创建一个新的 CMD 实例:
start "==" cmd.exe
但不能用于同一实例。
.NET 和 Console.Title
属性 也可以,但是当从批处理文件调用时,只要编译的 exe 运行,磁贴就会持续:
@if (@X)==(@Y) @end /* JScript comment
@echo off
setlocal
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
set "jsc=%%v"
)
if not defined jsc (
echo !!! Installation of .NET framework needed !!!
pause
exit /b 3
)
rem echo %jsc%
::if not exist "%~n0.exe" (
del /q /f %~n0.exe
call "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
::)
call %~n0.exe %*
endlocal & exit /b %errorlevel%
*/
import System;
var arguments:String[] = Environment.GetCommandLineArgs();
//Console.WriteLine(Console.Title);
if (arguments.length>0){
Console.Title=arguments[1];
}
//Console.WriteLine(Console.Title);
(可能通过代码注入是可能的)
有windows'native'方法吗?
使用 Win7 x64,我可以在有问题的字符前面换行时生成它。
@echo off
setlocal EnableDelayedExpansion
set LF=^
title !LF!,bc
在Win7中,使用LF时,标题的高度或位置似乎没有差异。
测试
cmd /V:on
@for /L %n in (1 1 1111) do @(title !LF!=Hello& title +Hello)
但是当前程序在标题中显示为 运行 的时间,因此 TITLE
命令本身会产生闪烁。
我找到了另一种方法:
title ^A,string
其中 ^A
是通过在按住 ALT
键 ( <pressALT><0><1><releaseALT>
) 的同时输入 0
1
来生成的。
您可以使用 echo ^A>>batch.bat
将其放入文件中,然后使用记事本将其移动到正确的位置(它不会在记事本中显示,例如白色space;比 space, 但不像 TAB 那样宽泛)
LF
是问题的答案,但也有解决方法。我想我已经检查了所有的 ASCII 字符,看起来 FS and GS 字符没有显示在命令提示符的标题中(这里有一个 FS
的例子):
@echo off
setlocal
::dbenham's hexprint was used here
::http://www.dostips.com/forum/viewtopic.php?p=23888
::Define a Linefeed variable
set LF=^
::above 2 blank lines are critical - do not remove.
::Create a FS variable
call :hexprint "0x1C" FS
title %FS%=;=
exit /b
:hexPrint string [rtnVar]
for /f eol^=^%LF%%LF%^ delims^= %%A in (
'forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(%~1"'
) do if "%~2" neq "" (set %~2=%%A) else echo(%%A
exit /b
但这不是 'perfect' 解决方案,因为 AppActivate 或 Tasklist 命令将检测 FS
和GS
个字符(LF
没有这样的问题)。
也可以使用 SOH
字符,但显示为 space.
FS也可以ctrl+制作
GS 与 ctrl+\
按 ctrl+A 的 SOH