Este script fará exatamente o que você pediu:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"
set /p "=Step 1" <NUL
REM Do some stuff...
set /p "=!ASCII_13!Step 2" <NUL
REM do some other stuff...
Encontrei essa resposta observando o código em uma biblioteca de manipulação de caracteres de script em lote gravada por Dave Benham chamada CharLib .
Esta biblioteca é capaz de criar todos os caracteres no intervalo 1..255.
Para mais informações, consulte o tópico "É possível converter um caractere ao seu valor ASCII? "
Edit 2017-4-26: Parece que o código acima não funciona mais . Não tenho certeza de quando esse comportamento teria mudado, mas definitivamente funcionava. O caractere CR
após o =
agora é removido pelo comando set
. Ah, parece ser uma mudança na maneira como o set
funciona entre o XP e versões posteriores do Windows. Veja a excelente resposta em Sobrescrever linha no arquivo de lote do Windows? (duplicado) para mais detalhes e exemplos de códigos extras.
Uma alternativa é colocar um caractere que não seja espaço em branco antes do !ASCII_13!
e fazer com que ele seja apagado também, talvez inserindo também um backspace (que não é removido) seguido por um espaço ou anexando espaços para o final da string de prompt (que não são removidos).
Por exemplo assim:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"
set /p "=Step 1" <NUL
REM Do some stuff...
set /p "=x!ASCII_13!Step 2 " <NUL
REM do some other stuff...