692 votes

Comment faire écho à une nouvelle ligne dans les fichiers batch ?

Comment pouvez-vous insérer une nouvelle ligne dans la sortie de votre fichier batch.

Je veux faire quelque chose comme :

> echo hello\nworld

Ce qui donnerait :

Bonjour
monde

7 votes

Ça m'a été utile. Je devais faire de l'écho \n \n | mon_app.exe dans un script. J'ai fait (echo. && echo.) | mon_app.exe

2 votes

Approche facile " Le code commence :" > echo hello&echo world , vous donnera ce dont vous avez besoin.

2 votes

Vous pouvez insérer un chr(255) ascii invisible sur une ligne séparée qui forcera une nouvelle ligne vide. Maintenez la touche [alt] enfoncée et appuyez sur 255 sur le clavier. Cela insère chr(255), qui est un carré vide, c'est-à-dire " echo (alt+255) " Vous ne pouvez utiliser que le clavier et non les chiffres en haut du clavier querty !

610voto

Matt Lacey Points 50756

utiliser

echo hello
echo.
echo world

19 votes

Est-il possible de fournir une chaîne de caractères dans une seule instruction echo ?

6 votes

Pourquoi avoir besoin de le faire avec une seule instruction echo ; où est le mal à en avoir une autre ?

3 votes

@Rob, je viens de rencontrer ce problème et aucune de ces solutions ne fonctionne. Dans mon exemple, vous avez besoin de l'écho dans une seule déclaration. Je suis en train de générer des fichiers tex à partir de HTML et de générer un Makefile à l'aide de echo "Makefile contents (which has \n)" > Makefile Avec des échos multiples, ça ne marcherait pas.

500voto

Grimtron Points 2640

echo hello & echo.world

Cela signifie que vous pourriez définir & echo. comme une constante pour une nouvelle ligne.

50 votes

L'exemple n'a pas besoin de point, mais vous en avez besoin pour afficher une ligne vide : echo. && echo hello && echo. && echo world

4 votes

Pouvez-vous faire cela avec un seul écho pour qu'il puisse être redirigé vers un fichier ?

52 votes

@Shahbaz - $ (echo Hello && echo World) > ./File.txt

146voto

Voilà, créez un fichier .bat avec ce qui suit :

@echo off

REM Creating a Newline variable (the two blank lines are required!)
set NLM=^

set NL=^^^%NLM%%NLM%^%NLM%%NLM%
REM Example Usage:
echo There should be a newline%NL%inserted here.

echo.
pause

Vous devriez voir un résultat comme le suivant :

There should be a newline
inserted here.

Press any key to continue . . .

Vous n'avez besoin que du code entre les déclarations REM, évidemment.

56 votes

Très impressionnant, pourriez-vous prendre le temps d'expliquer comment fonctionne le jeu de lignes NL=^^%NLM%%NLM%^%NLM%%NLM% ? Je n'arrive pas à comprendre.

1 votes

Hélas, cela ne fonctionne pas lorsque l'on transmet le fichier echo à un autre programme.

8 votes

@andy : je pense qu'un commentaire de +8 justifie une question : stackoverflow.com/questions/6379619/

101voto

macropas Points 1382

Il existe une fonction standard echo: dans les fichiers cmd/bat pour écrire une ligne blanche, qui émule une nouvelle ligne dans votre sortie cmd :

@echo off
@echo line1
@echo:
@echo line2

Sortie du fichier cmd cité ci-dessus :

line1

line2

37 votes

En fait, tout caractère spécial NON UTILISÉ devrait fonctionner. J'encourage toujours l'utilisation de / car la barre oblique est le caractère standard pour les options de commande. De même, je critique toujours l'utilisation du point que quelqu'un chez Microsoft a malheureusement choisi car la commande : echo.com donne des résultats différents selon la version du processeur de commandes MS-DOS/Windows Batch.

22 votes

La seule version qui fonctionne toujours est echo( . Il semble que cela puisse poser des problèmes, mais en fait cela fonctionne parfaitement. Dans tous les autres formulaires, il existe au moins une situation où la commande ne fonctionne pas comme prévu.

0 votes

@Aacini pouvez-vous trouver des références à ce sujet ? J'ai testé et cela fonctionne, ce qui est fascinant, mais il doit exister un mémo du concepteur, une spécification ou au moins un manuel qui raconte cette histoire.

75voto

jeb Points 26035

Comme la réponse de Ken, mais avec l'utilisation de l'expansion retardée.

setlocal EnableDelayedExpansion
set LF=^

REM Two empty lines are necessary
echo Line1!LF!Line2

Tout d'abord, un seul caractère de saut de ligne est créé et attribué à la variable LF.
Cela fonctionne car le signe d'insertion à la fin de la ligne essaie d'échapper au caractère suivant, mais si c'est un saut de ligne, il est ignoré et le caractère suivant est lu et échappé (même si c'est aussi un saut de ligne).
Il faut alors un troisième saut de ligne pour terminer l'instruction en cours, sinon la troisième ligne serait ajoutée à la variable LF.
Même si les fichiers batch ont des fins de ligne avec CR/LF, seuls les LF sont importants, car les CR sont supprimés dans cette phase de l'analyseur.

L'avantage d'utiliser l'expansion retardée est qu'il n'y a pas de traitement spécial des caractères.
echo Line1%LF%Line2 échouerait, car l'analyseur syntaxique s'arrête à un seul saut de ligne.

Pour plus d'explications, voir
SO:Les commandes longues sont réparties sur plusieurs lignes dans un fichier batch (.bat) Vista/DOS
SO : Comment l'interpréteur de commandes Windows (CMD.EXE) analyse-t-il les scripts ?

2 votes

Si vous transmettez la chaîne de caractères avec les nouvelles lignes comme paramètre à une sous-routine de traitement par lots, par ex. call :pause line1!\n!line2 , lancez la sous-routine avec setlocal EnableDelayedExpansion et le terminer par setlocal DisableDelayedExpansion pour éviter que les nouvelles lignes ne soient interprétées prématurément.

2 votes

+1 pour la galerie de personnages echo, echo; echo( echo/ echo+ echo= et la galerie des voleurs echo. echo\ echo: . Si vous pouviez m'expliquer pourquoi ça marche, je vous devrais une bière gratuite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X