Можно ли использовать set / p и очистить или скрыть вывод? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь сделать небольшую «игру» с помощью пакета, и мне нужно получить ввод от пользователя и использовать его, но мне нужно получить переменную (через 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 off
set /p variable1=

 [clear line]

echo %variable1%
pause

1 Ответ

0 голосов
/ 06 июня 2019
@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%

Вы можете прочитать подробное объяснение метода, используемого на Переместить курсор на любую позицию , используя только команду ECHO

ВАЖНО! «Ошибка», которая делает этот метод возможным, была исправлена ​​в Windows 10, поэтому в этом случае необходимо включить «Legacy console mode».Конечно, вы также можете перемещать курсор, используя escape-последовательности ANSI в Windows 10. Однако представленное здесь решение работает во всех версиях Windows ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...