将 CMD 标题改回原来的样子(批处理)

dit*_*ncy 4 windows cmd batch-file

我正在尝试让我的批处理脚本更改命令提示符的标题以更改回我的脚本启动之前的内容。

下面是一个例子:

@echo off
title My Script
REM rest of script here
:end
title %origcmdtitle%
Run Code Online (Sandbox Code Playgroud)

所以在它运行之前,它会有它的默认标题;像Command PromptC:\Windows\system32\cmd.exe

然后,当我的脚本运行时,标题更改为 My Script

最后,当脚本结束时,我希望它改回 CMD 的原始标题(它只是保持为My Script

谢谢!

dbe*_*ham 5

这一直是编写批处理代码的众多棘手问题之一。

我见过一些相当复杂的代码来尝试识别当前标题并将值保存在变量中,以便在批处理脚本结束之前可以恢复标题。但我从来没有对这些结果完全满意。

我认为最可靠和直接的方法是在新的 cmd.exe 会话中启动脚本,然后您可以在其中设置标题而不受惩罚。一旦您的脚本结束,子进程将结束,原始 cmd.exe 进程将恢复控制并恢复原始标题。

如果您使用“唯一”额外参数来表示已发生重新启动,则您可以让脚本在新的 cmd.exe 会话中自行重新启动。然后您可以使用 SHIFT 来恢复原始参数。

这是一个简单的例子:

@echo off
if "%~1" equ ":SET-TITLE" goto %1
cmd /c "%~f0" :SET-TITLE %*
exit /b

:SET-TITLE
shift /1
title myTitle
echo %%1=%1  %%2=%2
pause
exit /b
Run Code Online (Sandbox Code Playgroud)

这种方法有几个潜在的问题。

  • 任何命令行参数都会被多次解析,如果有转义的毒字符,这可能会出现问题。逃生必须加倍。

  • 脚本所做的环境变量更改不可能在脚本终止后继续存在,除非您将变量写入文件,然后在返回父会话后重新加载文件中的值。