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

Comment Pouvez-vous insérer une nouvelle ligne à partir de la sortie de votre fichier batch?

je veux faire quelque chose comme:

> echo hellonworld

qui produirait:

bonjour

monde

538
demandé sur Squashman 2008-09-25 15:50:24

18 réponses

echo hello & echo.world

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

399
répondu Grimtron 2018-04-19 13:27:00

utiliser:

echo hello
echo.
echo world
470
répondu Matt Lacey 2017-04-01 06:36:50

voilà, créer 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 la sortie comme suit:

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.

117
répondu jeb 2018-02-26 15:51:04

il y a une fonctionnalité standard echo: dans cmd / bat-files pour écrire une ligne vierge, qui émule une nouvelle ligne dans votre cmd-output:

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

Sortie de cité ci-dessus cmd-fichier:

line1

line2
90
répondu macropas 2010-06-26 08:11:06

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"

tout d'abord, un seul caractère de linefeed est créé et attribué à la variable \n -.

Cela fonctionne alors que le caret à la fin de la ligne essaie d'échapper au caractère suivant, mais s'il s'agit d'un Linefeed, il est ignoré et le caractère suivant est lu et échappé (même s'il s'agit également d'un linefeed).

Ensuite, vous avez besoin d'un troisième linefeed pour mettre fin à la instruction courante, sinon la troisième ligne serait ajoutée à la variable LF.

Même les fichiers par lots ont des fins de ligne avec CR / LF seulement 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 de caractères spéciaux du tout.

Plus d'explications sont à

SO:longues commandes divisées sur plusieurs lignes dans vista/DOS batch (.bat) file

alors: comment L'interpréteur de commandes Windows (CMD.EXE) analyser les scripts?

Edit: Éviter Les echo.

cela ne répond pas à la question, car la question portait sur simple echo qui peut produire plusieurs ligne.

mais malgré les autres réponses qui suggèrent 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 complètement échouer, comme cmd.exe recherche un fichier nommé ECHO et essayez de le démarrer.

pour imprimer juste une ligne vide, vous pouvez utiliser un de

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

mais l'utilisation de echo. , echo\ ou echo: devrait être évitées, car elles peuvent être très lentes, en fonction de l'endroit où le script sera exécuté, comme un lecteur réseau.

54
répondu jeb 2017-05-23 12:18:28

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, dites que vous voulez quelque chose d'un peu plus fantaisiste, ...

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

sorties

hello
world

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

ventilation

set n= fixe la variable n égale à:

^ annule le symbole suivant à suivre:

& signifie exécuter une autre commande sur la même ligne. Nous ne nous soucions pas du niveau d'erreur (c'est une déclaration d'écho pour crier fort), donc non && est nécessaire.

echo. continue la déclaration d'echo.

tout cela fonctionne parce que vous pouvez réellement créer des variables qui sont du code, et les utiliser à l'intérieur d'autres commandes. C'est un peu comme une fonction de ghetto, puisque batch n'est pas exactement le plus avancé des langages de script shell. Cela ne fonctionne que parce que la mauvaise utilisation des variables de batch, ne désignant pas entre les ints, les chars, les flotteurs, les chaînes, etc naturellement.

Si vous êtes malin, vous pourriez obtenir que cela fonctionne avec d'autres choses. Par exemple, en l'utilisant pour faire écho à un onglet

set t=^&echo.     ::there are spaces up to the double colon
34
répondu coltonon 2016-06-29 05:33:20

Lorsqu'on fait écho à quelque chose pour rediriger vers un fichier, plusieurs commandes echo ne fonctionnent pas. Je pense que peut-être le ">>" redirecteur est un bon choix:

echo hello > temp
echo world >> temp
19
répondu Crend King 2009-08-09 01:00:23

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

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

sortie

C:\>test.bat
hello
world
15
répondu Peter Mortensen 2015-10-21 09:30:25

si vous avez besoin de mettre des résultats dans un fichier, vous pouvez utiliser

(echo a & echo. & echo b) > file_containing_multiple_lines.txt
13
répondu test30 2014-09-02 00:09:25

, Vous pouvez aussi faire comme ceci,

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

La sortie sera,

a
b
c d

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

(for %%i in (a b "c d") do @echo %%~i)
9
répondu albert 2011-09-29 19:05:36

si quelqu'un vient ici parce qu'il cherche à faire écho à une ligne blanche D'un makefile MINGW make, j'ai utilisé

@cmd /c echo.

simplement en utilisant echo. provoque le redoutable message d'erreur process_begin: CreateProcess(NULL, echo., ...) failed. .

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

6
répondu Wayne Uroda 2013-04-22 04:56:19

Pour commencer une nouvelle ligne dans le lot, tout ce que vous avez à faire est d'ajouter "echo[", comme suit:

echo Hi!
echo[
echo Hello!
3
répondu PryroTech 2016-12-16 20:31:49

cela a fonctionné pour moi, aucune extension retardée nécessaire:

@echo off
(
echo ^<html^> 
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause

il écrit sortie comme ceci:

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
2
répondu NahuelGQ 2013-12-03 15:48:18

Ken et jeb solutions fonctionne bien.

mais les nouvelles lignes sont générées avec seulement un caractère LF et j'ai besoin de caractères CRLF (version Windows).

à ceci, à la fin du script, j'ai converti LF en CRLF.

exemple:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
2
répondu otaviodecampos 2017-04-01 06:40:16

si on a besoin d'utiliser famous \n dans des chaînes de caractères qui peuvent être passées à une variable, peut écrire un code comme dans le Hello.bat script ci-dessous:"

@echo off
set input=%1
if defined input (
    set answer=Hi!\nWhy did you call me a %input%?
) else (
    set answer=Hi!\nHow are you?\nWe are friends, you know?\nYou can call me by name.
)

setlocal enableDelayedExpansion
set newline=^


rem Two empty lines above are essential
echo %answer:\n=!newline!%

de cette façon la sortie multiligne peut être préparée à un endroit, même dans un autre scritpt ou fichier externe, et imprimée dans un autre.

Le saut de ligne est en tenue saut de ligne à la variable. Sa valeur doit être remplacée par après la ligne echo est développée de sorte que j'utilise extension locale pour activer les signes d'exclamation qui étendent les variables lors de l'exécution. Et l'exécution remplace \n par newline contents (cherchez la syntaxe à help set ). Nous pourrions bien sûr utiliser !de retour à la ligne! tout en réglant la réponse mais \n est plus pratique. Il peut être passé de l'extérieur( essayez Hello R2\nD2 ), où personne ne connaît le nom de la variable tenant la rupture de ligne (Oui, Hello C3!de retour à la ligne!P0 fonctionne de la même manière).

exemple ci-dessus peut être affiné en sous-programme ou lot autonome, utilisé comme call:mlecho Hi\nI'm your comuter :

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^


echo %text:\n=!nl!%
goto:eof

veuillez noter que des antislashs supplémentaires n'empêcheront pas le script d'analyser \n substring.

1
répondu Tomator 2018-02-08 10:06:53

vous pouvez utiliser @echo (@echo + [space] + [insectable space] )

Note: L'espace insécable peut être obtenu avec Alt+0160

Espère que cela aide :)

[edit] Hmm vous avez raison, j'en avais besoin dans un Makefile, ça marche parfaitement là-dedans. Je suppose que ma réponse n'est pas adaptée aux fichiers par lots... Mon mauvais.

0
répondu johan d. 2013-07-19 07:58:10

je ne peux pas faire plus simple que:

echo echo hello^&echo world^&pause>silly.bat                       
call silly.bat
-1
répondu strance 2015-10-21 09:31:51

la façon la plus conservatrice de caractères pour accomplir ceci dans les systèmes linux, est avec le -e alias - qui interprète les caractères échappés qui sont effacés.

echo -e "hello\nworld"

Voici d'autres exemples

-3
répondu i_live_for_down_votes 2018-07-30 14:41:47