<nul set /p=text
- это трюк для вывода строки (текстовой подсказки) без перевода строки в конце, поэтому курсор останется на той же строке, и мы можем позже вернуться к началу строки возврат каретки) перезаписать.
Проблема, которую вы обнаружили с указанным ответом, заключается в изменении поведения в set /p
. До Windows XP команда set /p
могла отображать пробелы в начале текстового приглашения, но в Vista белые символы удаляются из начала приглашения. Вы не можете отправить возврат каретки в начале строки. Но вы можете использовать его в другом месте
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
<nul set /p"=This is the line 1 !CR!"
<nul set /p"=This is the line 2 "
То есть вместо отправки CR
в начале строки, отправьте его в конце предыдущей строки.
Другим вариантом является включение другого символа в качестве начала текстового приглашения перед CR
. Включение видимого символа порождает другую проблему, так как он должен быть перезаписан в следующей строке, чтобы он не был виден. Backspace (ascii 0x08
) - безопасный (обычно) вариант
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
for /f %%a in ('"prompt $H&for %%b in (0) do rem"') do set "BS=%%a"
<nul set /p"=This is the line 1"
<nul set /p"=!BS!!CR!This is the line 2"