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
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
Pourquoi avoir besoin de le faire avec une seule instruction echo ; où est le mal à en avoir une autre ?
@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.
L'exemple n'a pas besoin de point, mais vous en avez besoin pour afficher une ligne vide : echo. && echo hello && echo. && echo world
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.
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.
@andy : je pense qu'un commentaire de +8 justifie une question : stackoverflow.com/questions/6379619/
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.
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.
@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.
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 ?
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.
+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 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.
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 !
0 votes
De même que la moitié de la réparation d'un ordinateur consiste à le brancher et à l'allumer, la moitié du développement d'un logiciel consiste en ce que j'appelle ingénierie spatiale . Nous besoin de nos lignes vierges juste comme ça.
0 votes
Que pensez-vous de ceci ?
echo Yes&echo No
1 votes
@jwzumwalt merci pour la suggestion alt+255, cela fonctionne très bien en ligne de commande.
0 votes
Printf " \n\n\n "
0 votes
Quelqu'un ici a-t-il proposé newline comme fichier batch de commande externe ?
NEWLINE.bat
. Certaines des solutions proposées ici ne fonctionnent pas correctement telles quelles, dans un fichier batch séparé. Par exemple, certaines syntaxes donnentECHO is off
si elle est appelée directement depuis la ligne de commande.