我看到有人在不使用
CLS
的情况下使用 !CR!
(回车符)覆盖一行:
@echo off
setlocal EnableDelayedExpansion
for /f %%a in ('copy /z "%~f0" nul') do set "CR=%%a"
<nul set /p =Hello, world!CR!
<nul set /p =Hi ,
pause >nul
输出:
Hi , world
!CR!
将光标移动到行首,这样 echo
或 <nul set /p =
就可以覆盖该行而不用 CLS
。
我要问的是,我可以对整个控制台窗口(不仅仅是一行)做完全相同的事情吗?或者,我可以将光标移动到控制台的最开头,以便覆盖所有内容吗?
我知道我可以使用
CLS
来擦除所有内容,但我讨厌 CLS
在删除所有内容时产生的闪烁,然后立即 ECHO
删除其他内容。
我正在尝试批量制作交互式用户界面,因此任何可能的解决方案都会有很大帮助。
只需将
!ESC![<line>;<column>H
放入 ECHO 输出即可。还有功能
for /F %%a in ('ECHO prompt $E ^| cmd') do (
SET "ESC=%%a"
)
在你的脚本中的某个地方。
@ECHO OFF
SETLOCAL EnableDelayedExpansion
for /F %%a in ('ECHO prompt $E ^| cmd') do (
SET "ESC=%%a"
)
ECHO Normal ECHO
ECHO !ESC![3;2HWrite A
ECHO !ESC![6;12HB
ECHO !ESC![4;20HC
ECHO !ESC![1;30HD Note: The cursor will now be in the line after this
ECHO ECHO normal again
PAUSE >NUL
输出:
或者看看这个工具:https://github.com/TheBATeam/BATBOX-An-Awesome-Batch-Plugin