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

时间:2019-06-06 12:01:48

标签: batch-file

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

我尝试了很多在这里找到清晰线条的东西,例如

5

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

我需要这样的东西:

@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

1 个答案:

答案 0 :(得分:0)

@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 hkcu\environment /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%

您可以阅读有关Move cursor to any position using just ECHO command上使用的方法的详细说明

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