Est-il possible de faire écho à certains caractères non imprimables en batch / cmd?

motivation

J’ai un fichier .bat tiers, en quelque sorte long, écrit pour une fonction spécifique et qui nécessiterait un effort considérable pour ré-écrire (ce qui est également gêné par mon problème). Dans les boucles for, le moyen le plus élémentaire de déboguer semblerait renvoyer certaines informations à l’écran. J’avais l’habitude de le faire avec le caractère \r (0x0D) dans d’autres langages qui sur certains terminaux / console ré-écrit la même ligne (pour éviter le débordement, car dans mon cas la dernière ligne contiendrait l’erreur). J’enregistre déjà la valeur dans une variable. Cependant, étant donné que l’itération peut prendre un certain temps, je serais tout de même heureux d’écrire une sortie sur l’écran qui ne débordera pas.

ce que j’ai essayé

  • Je sais que je peux faire écho à une nouvelle ligne en cmd avec echo. – mais je n’ai besoin que du retour chariot
  • Je les ai essayées mais elles n’ont pas fonctionné: echo \r , echo ^r , echo \x0d , echo ^x0d , echo #0d , echo ^#0d , echo #x0d , echo ^x0d
  • J’ai essayé d’ esquiver le filet sans trop d’aide

question

Est-il possible de faire écho à un caractère de retour chariot (ou autre caractère non imprimable) dans un fichier batch Windows / dos / nt / cmd?

ps. J’utilise le XP ou le processeur 7 cmd

Vous avez besoin de deux hacks – un pour définir un caractère de retour chariot et un autre pour faire écho à une ligne de texte sans indiquer le caractère de nouvelle ligne.

1) Définir le retour chariot.

 :: Define CR to contain a carriage return (0x0D) for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A" 

Une fois définie, la valeur ne peut être accédée que par extension différée – comme dans !CR! , pas %CR% .

2) Imprimer le texte à l’écran sans émettre de nouvelle ligne

  

Cela échouera si la chaîne commence par un = .

En outre, les guillemets et / ou les espaces blancs peuvent être supprimés en fonction de la version de Windows.

Mettre tous ensemble

 @echo off setlocal enableDelayedExpansion :: Define CR to contain a carriage return (0x0D) for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A" nul nul  

Notez que je mets le !CR! à la fin de chaque message en préparation pour le prochain. Vous ne pouvez pas mettre le !CR! au début car les espaces blancs en tête seront dépouillés.

Quelque part sur la ligne, “echo \” fonctionne pour imprimer une ligne [cr]. Idéal pour terminer une sortie d’une autre commande qui ne met pas [cr] à la fin. Je l’ai utilisé pour envoyer des fichiers CR à des fichiers comme dans IPconfig | trouver “Reply” >> myip.txt puis echo \ >> myip.txt

S’appuyant sur le post de dbenham, j’ai les routines suivantes qui fonctionnent dans Win7 et principalement modifiables dans le Bloc-notes; Cependant, j’ai utilisé Scite pour générer le retour arrière , ALT + 0 0 8 , caractère. Il diffère légèrement en effaçant d’abord la ligne et en plaçant le curseur à la fin du texte. Voici les routines:

 : RECHO
 retour arrière ! Onglet de l' onglet ! CR! onglet onglet onglet onglet onglet "
 backspace ! CR!% *"
 GOTO: EOF
 : NECHO
 retour arrière ! Onglet de l' onglet ! CR! onglet onglet onglet onglet onglet "
 Retour ECHO! CR!% *
 GOTO: EOF

L’exemple de dbenham a changé:

 @ECHO OFF SETLOCAL EnableDelayedExpansion FOR /F %%a IN ('copy /Z "%~dpf0" nul') DO SET "CR=%%a" SET "BS=" ECHO Testing CR. This line a regular echo ... CALL :RECHO Part 1 - press a key pause >nul CALL :RECHO Part 2 - press a key pause >nul CALL :NECHO Part 3 - Finished ECHO Testing CR. This line a regular echo ... GOTO END :RECHO  

Lors de la copie du script ci-dessus, assurez-vous que le caractère de retour arrière est préservé.

     SET "BS = retour arrière "