Question Comment pouvez-vous faire écho à une nouvelle ligne dans les fichiers batch?


Comment pouvez-vous insérer un saut de ligne à partir de la sortie de votre fichier batch?

Je veux faire quelque chose comme:

> echo hello\nworld

Ce qui produirait:

Bonjour
  monde


522
2017-09-25 11:50


origine


Réponses:


echo hello & echo.world

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


392
2017-09-25 11:52



Utilisation:

echo hello
echo.
echo world

458
2017-09-25 11:51



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 une sortie comme celle-ci:

There should be a newline
inserted here.

Press any key to continue . . .

Vous avez seulement besoin du code entre les instructions REM, évidemment.


114
2017-11-06 18:43



Il y a une caractéristique standard echo: dans cmd / bat-files pour écrire une ligne vide, qui émule une nouvelle ligne dans votre sortie cmd:

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

Sortie du fichier cmd ci-dessus:

line1

line2

89
2018-06-26 08:11



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

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

Un seul caractère de saut de ligne est d'abord créé et affecté à la variable \ n.
Cela fonctionne comme le caret à la fin de la ligne tente d'échapper au caractère suivant, mais s'il s'agit d'un saut de ligne, il est ignoré et le caractère suivant est lu et échappé (même s'il s'agit également d'un saut de ligne).
Ensuite, vous avez besoin d'un troisième saut de ligne pour terminer l'instruction en cours, sinon la troisième ligne sera ajoutée à la variable LF.
Même 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 de l'utilisation de l'expansion retardée est qu'il n'y a aucun traitement de caractère spécial.
echo Line1%LF%Line2 échouerait, car l'analyseur arrête d'analyser les sauts de ligne simples.

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

Modifier: Éviter echo. 

Cela ne répond pas à la question, car la question portait sur echo Cela peut produire plusieurs lignes.

Mais malgré les autres réponses qui suggère l'utilisation de echo. pour créer une nouvelle ligne, il convient de noter que echo. est le pire, car il est très lent et il peut échouer complètement, car cmd.exe recherche un fichier nommé ECHO et essayez de le démarrer.

Pour imprimer une ligne vide, vous pouvez utiliser l'un des

echo,
echo;
echo(
echo/
echo+
echo=

Mais l'utilisation de echo., echo\ ou echo: Cela devrait être évité, car ils peuvent être très lents, selon l'endroit où le script sera exécuté, comme un lecteur réseau.


51
2018-06-16 23:52



echo. Assez dit.

Si vous en avez besoin sur une seule ligne, utilisez le &. Par exemple,

echo Line 1 & echo. & echo line 3

sortirait comme:

Line 1

line 3

Maintenant, dis que vous voulez quelque chose d'un peu plus colombophile, ...

set n=^&echo.
echo hello %n% world

Les sorties

hello
world

Ensuite, jetez juste un %n% chaque fois que vous voulez une nouvelle ligne dans une déclaration d'écho. Ceci est plus proche de votre \n utilisé dans diverses langues.

Panne

set n= Définit la variable n égal à:

^ Annule le prochain symbole à suivre:

& Moyens de faire une autre commande sur la même ligne. Nous ne nous soucions pas de errorlevel (c'est une déclaration d'écho pour pleurer à haute voix), donc pas && est nécessaire.

echo. Continue la déclaration d'écho.

Tout cela fonctionne parce que vous pouvez réellement créer des variables qui sont du code, et les utiliser dans d'autres commandes. C'est un peu comme une fonction de ghetto, puisque le batch n'est pas exactement le plus avancé des langages de script shell. Cela ne fonctionne que parce que le batch utilise mal les variables, ne désignant pas entre les ints, les chars, les floats, les chaînes, etc.

Si vous êtes rusé, vous pourriez obtenir cela pour travailler avec d'autres choses. Par exemple, l’utiliser pour faire écho à un onglet

set t=^&echo.     ::there are spaces up to the double colon

33
2017-07-16 23:50



Lorsque vous faites écho à quelque chose à rediriger vers un fichier, plusieurs commandes d'écho ne fonctionneront pas. Je pense que le redirecteur ">>" est peut-être un bon choix:

écho bonjour> temp
monde de l'écho >> temp

19
2017-08-09 01:00



Tout comme Grimtron le suggère - voici un exemple rapide pour le définir:

@echo off
set newline=^& echo.
echo hello %newline%world

Sortie

C:\>test.bat
hello
world

15
2018-03-05 16:47



Si vous devez mettre des résultats dans un fichier, vous pouvez utiliser

(echo a & echo. & echo b) > file_containing_multiple_lines.txt

13
2017-09-02 00:09



Vous pouvez aussi faire comme ça,

(for %i in (a b "c d") do @echo %~i)

La sortie sera,

a
b
c d

Notez que lorsque ceci est mis dans un fichier batch, '%' doit être doublé.

(for %%i in (a b "c d") do @echo %%~i)

9
2017-09-20 17:06



Si quelqu'un vient ici parce qu'ils cherchent à faire écho à une ligne vide d'un makefile MINGW, j'ai utilisé

@cmd /c echo.

en utilisant simplement echo. provoque le redouté process_begin: CreateProcess(NULL, echo., ...) failed. Message d'erreur.

J'espère que cela aide au moins une autre personne là-bas :)


6
2018-04-22 04:56