Écraser la ligne dans le fichier batch de Windows?

Juste avant de dire quelque chose, j'ai essayé ce code:

@echo off setlocal enableextensions enabledelayedexpansion for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a" set /p "=Example 1" <NUL set /p "=!ASCII_13!Example 2" <NUL 

Ma source: Comment écraser la même ligne dans la sortie de la commande à partir du fichier batch (La réponse vérifiée à partir de celle-ci)

Et cela n'a pas marché pour moi. Il vient de Example 1Example 2 tant Example 1Example 2 lorsque je l'ai essayé.

J'ai donc besoin d'un moyen d'écraser la même ligne dans un fichier batch (par exemple, il a dit "Exemple 1" avant, mais après cette ligne, on dira "Exemple 2" à la place).

Merci!

<nul set /p=text est une astuce pour écho à une chaîne (l'invite de texte) sans un flux de ligne à la fin, de sorte que le curseur reste dans la même ligne et nous pouvons plus tard retourner au début de la ligne (envoi d'un Retour de chariot) pour l'écraser.

Le problème que vous avez trouvé avec la réponse indiquée est le changement de comportement dans l' set /p . Jusqu'à Windows XP, la commande set /p été capable d'écho des espaces au début de l'invite de texte, mais à partir des caractères blancs Vista sont supprimés dès le début de l'invite. Vous ne pouvez pas envoyer le retour de chariot au début de la chaîne. Mais vous pouvez l'utiliser à un autre endroit

 @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 " 

C'est-à-dire, au lieu d'envoyer le CR au début d'une ligne, l'envoyer à la fin de la ligne précédente.

Une autre option consiste à inclure un caractère différent comme début de l'invite de texte avant le CR . L'inclusion d'un caractère visible génère un autre problème, car il devrait être écrasé dans la ligne suivante, de sorte qu'il n'est pas visible. Un backspace (ascii 0x08 ) est une option sûre (habituellement)

 @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" 

Depuis Windows 10 Treshold2, la console comprend
Ansi Escape Codes
Ces codes nécessitent l'hexadécimal d'échappement hexadécimal 0x1b ou décimal 27 qui est
Difficile à générer (dépend de votre éditeur)

Le code pour passer à la première colonne et n lignes est ESC[nF
Le code à supprimer à la fin de la ligne est ESC[0J

Ces deux codes ensemble (une ligne):

  esc [ 1 F esc [ 0 J hex 1B 5B 31 46 1B 5B 30 4A 

Ce lot utilise certutil pour décoder une chaîne hexagonale à Ascii ici

 @echo off echo 1B 5B 31 46 1B 5B 30 4A>Ansi.hex Del Ansi.bin certutil -decodehex Ansi.hex Ansi.bin >NUL 2>&1 Set /P Ansi=<Ansi.bin Echo First Line extra long to see it's deleted Timeout /t 3 >Nul Echo %Ansi%Second Line Timeout /t 3 >Nul Echo %Ansi%Third Line Timeout /t 3 >Nul Echo %Ansi%Fourth Line