Você não pode. Geralmente, você pode conseguir esse tipo de coisa incluindo um caractere de retorno de carro (0x0D) no arquivo que colocará o cursor de volta na primeira coluna na mesma linha. Mas neste caso, não funciona; o CR é comido silenciosamente.
Além disso, obter o CR é meio complicado e pelo menos aqui envolveu um editor de texto. Eu sugiro que você escreva um pequeno programa utilitário que faça isso por você, na verdade não é muito difícil. O pequeno programa C a seguir pode ser suficiente (se você não precisar de Unicode):
#include <stdio.h>
int main(int argc, char* argv[]) {
if (argc < 2) return 1;
printf("\r%s", argv[1]);
}
Não faz nada além de imprimir um caractere CR e, em seguida, o texto que você especificar como seu primeiro argumento. Uso da seguinte maneira:
@echo off
<nul set /P X=Step 1
pause>nul 2>nul
over.exe "Step 2"
A última linha é a chamada para esse programa. A segunda linha é o idioma normal do lote para imprimir texto sem quebras de linha à direita (o que é importante nesse caso, caso contrário, você não poderá sobrescrever a linha). Você também pode usar o programa acima nesse local.
Uma maneira levemente hacky, mas a única onde você pode ter certeza de onde acaba, seria usar cls
antes da saída da etapa. Vai piscar, mas dessa forma você sempre escreve no canto superior esquerdo. E derrube tudo o que estava visível no console (e é por isso que eu não recomendo); a maioria dos usuários não gosta muito disso.