如何在批处理中将光标移动到控制台窗口的最开头?

问题描述 投票:0回答:1

我看到有人在不使用

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
删除其他内容。

我正在尝试批量制作交互式用户界面,因此任何可能的解决方案都会有很大帮助。

batch-file
1个回答
1
投票

只需将

!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

© www.soinside.com 2019 - 2024. All rights reserved.