是否可以使用 set /p 并清除或隐藏输出



我正在尝试通过批处理制作一个小"游戏",并且需要从用户那里获取输入并使用它,但我需要获取一个变量(通过 set/p 或类似的东西(然后清除行/隐藏输出(因为它通常只输出您输入的任何内容(。但是,我不能使用 CLS,因为其他行需要留在那里。但是,我确实希望能够看到您正在键入的内容。

尝试了很多我在这里发现的清晰线条的东西,比如

@echo off
setlocal enableDelayedExpansion
:: Define CR to contain a carriage return (0x0D)
for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A"
<nul set/p"=test!CR!"
pause >nul
pause

但这只做类似 echo 的事情,我不能用它来获取变量。

我需要这样的东西:

@echo off
set /p variable1=
 [clear line]
echo %variable1%
pause
@echo off
setlocal EnableDelayedExpansion
rem Get a CR, BS and TAB characters
for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a"
for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"
set "TAB="
rem First, try the method for Windows XP
for /F "skip=4 delims=pR tokens=2" %%a in ('reg query hkcuenvironment /v temp' ) do set "TAB=%%a"
rem Then, the method for newer versions
rem http://www.dostips.com/forum/viewtopic.php?f=3&t=1733&p=6840#p6853
for /F "tokens=2 delims=0" %%a in ('shutdown /? ^| findstr /BC:E') do if not defined TAB set "TAB=%%a"
rem Initialize spaces; used to delete previous line
set "spaces=                                                         "
rem Get the input line
set /P "variable1=Enter input: "
rem Move cursor one line up: TAB+BS+BS
rem Move cursor to begin of line: CR
rem Delete previous line: spaces
rem Leave cursor at beginning of the line: CR
set /P "=.%TAB%!BS!!BS!!CR!%spaces%!CR!" < NUL
echo %variable1%

您可以阅读有关仅使用 ECHO 命令将光标移动到任何位置时使用的方法的详细说明

重要!使此方法成为可能的"错误"已在Windows 10中修复,因此在这种情况下,您需要启用"旧版控制台模式"。当然,您也可以在 Windows 10 中使用 ANSI 转义序列移动光标。但是,此处提供的解决方案适用于所有Windows版本...

最新更新