<nul set /p=text
é um truque para fazer o eco de uma string (o prompt de texto) sem uma linha no final, para que o cursor permaneça na mesma linha e possamos retornar ao início da linha (enviando uma linha retorno) para sobrescrevê-lo.
O problema encontrado com a resposta indicada é a mudança de comportamento no set /p
. Até o Windows XP, o comando set /p
conseguiu ecoar os espaços no início do prompt de texto, mas os caracteres brancos do Vista foram removidos do início do prompt. Você não pode enviar o retorno de carro no início da string. Mas você pode usá-lo em outro lugar
@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 "
Ou seja, em vez de enviar o CR
no início de uma linha, envie-o no final da linha anterior.
Outra opção é incluir um caractere diferente como o início do prompt de texto antes do CR
. A inclusão de um caractere visível gera outro problema, pois ele deve ser substituído na próxima linha para que não seja visível. Um backspace (ascii 0x08
) é uma opção segura (geralmente)
@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"