【问题标题】:How can I set a title that starts with comma, semicolon or equal sign?如何设置以逗号、分号或等号开头的标题?
【发布时间】:2015-07-23 16:31:02
【问题描述】:

显然可以设置包含 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 的“原生”方式吗?

【问题讨论】:

    标签: batch-file cmd title titlebar


    【解决方案1】:

    使用 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 在窗口窗格中更高。几乎就像你可以在 TITLE 中加入两行一样。
    【解决方案2】:

    我找到了另一种方式:

    title ^A,string
    

    其中^A 是通过在按住ALT 键(<pressALT><0><1><releaseALT>)的同时输入0 1 生成的。

    您可以使用echo ^A>>batch.bat 将其放入文件中,然后使用记事本将其移动到正确的位置(它不会在记事本中显示,如空格;比空格宽,但不如制表符宽)

    【讨论】:

    • 加一但检查我的答案。某些字符不会显示在控制台标题中,但如果您使用 AppActivate 或 Tasklist,它们会被检测到。
    【解决方案3】:

    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
    

    但这不是一个“完美”的解决方案,因为 AppActivateTasklist 命令会检测到 FSGS 字符(LF 没有这样的问题)。 也可以使用SOH 字符,但它显示为空格。

    fs也可以用ctrl+]

    使用 ctrl+ 的 GS\

    使用 ctrl+A 的 SOH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 2022-03-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多