Comment pouvez-vous insérer une nouvelle ligne à partir de la sortie de votre fichier batch?
Je veux faire quelque chose comme:
echo hello\nworld
Ce qui produirait:
hello
world
windows
batch-file
newline
Brian R. Bondy
la source
la source
echo Yes&echo No
Réponses:
echo hello & echo.world
Cela signifie que vous pouvez définir
& echo.
une constante pour une nouvelle ligne\n
.la source
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
echo(
pour de meilleures performances (toujours sans souci d'espace). Discussion approfondie sur d'autres personnages et leurs mérites / défauts chez ECHO. ÉCHEC pour donner du texte ou une ligne vierge - Utilisez plutôt ECHO /Utilisation:
la source
echo "Makefile contents (which has \n)" > Makefile
plusieurs échos, cela ne fonctionnerait pas(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
et puisecho line 2 >> Makefile
. L'utilisation de>>
entraîne l'ajout de la sortie au fichier, ce qui correspond précisément au comportement dont vous avez besoin dans ce cas.Voilà, créez un fichier .bat contenant les éléments suivants:
Vous devriez voir une sortie comme celle-ci:
Évidemment, vous n'avez besoin que du code entre les instructions REM.
la source
set nl=^&echo.
, donne alors justeecho hello %nl% world
le même effet.Il existe une fonctionnalité standard
echo:
dans les fichiers cmd / bat pour écrire une ligne vierge, qui émule une nouvelle ligne dans votre sortie cmd:Sortie du fichier cmd cité ci-dessus:
la source
echo(
. Il semble que cela pourrait causer des problèmes, mais cela fonctionne parfaitement. Tous les autres formulaires ont au moins une situation où la commande ne s'exécutera pas comme souhaité.ECHO(
échoue.echo
, et quels sont leurs effets?"Comme la réponse de Ken, mais avec l'utilisation de l'expansion retardée.
Tout d'abord, un seul caractère de saut de ligne est créé et affecté à la variable \ n.
Cela fonctionne comme le signe d'insertion à la fin de la ligne tente d'échapper le 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 serait 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 d'utiliser l'extension retardée est qu'il n'y a pas du tout de gestion de caractères spéciaux.
echo Line1%LF%Line2
échouerait, car l'analyseur arrête l'analyse à des sauts de ligne uniques.Plus d'explications sont disponibles sur
SO: Les commandes longues sont réparties sur plusieurs lignes dans le fichier batch Vista / DOS (.bat)
SO: Comment le Windows Command Interpreter (CMD.EXE) analyse-t-il les scripts?
Modifier: éviter
echo.
Cela ne répond pas à la question, car la question portait sur une seule
echo
qui peut produire plusieurs lignes.Mais malgré les autres réponses qui suggèrent l'utilisation de
echo.
pour créer une nouvelle ligne, il convient de noter queecho.
c'est le pire, car il est très lent et peut complètement échouer, car cmd.exe recherche un fichier nomméECHO
et essaie de le démarrer.Pour imprimer uniquement une ligne vide, vous pouvez utiliser
Mais l'utilisation de
echo.
,echo\
ouecho:
devrait être évitée, car ils peuvent être très lents, en fonction de l'emplacement où le script sera exécuté, comme un lecteur réseau.la source
call :pause line1!\n!line2
, démarrez le sous-programme avecsetlocal EnableDelayedExpansion
et terminez-le avecsetlocal DisableDelayedExpansion
pour éviter que les sauts de ligne ne soient interprétés prématurément.echo,
echo;
echo(
echo/
echo+
echo=
et la galerie des voleursecho.
echo\
echo:
. Maintenant, si vous deviez expliquer pourquoi diable ces travaux, je vous devrais une bière gratuite.echo.
Assez dit.Si vous en avez besoin sur une seule ligne, utilisez le
&
. Par exemple,produirait comme:
Maintenant, dites que vous voulez quelque chose d'un peu plus chic, ...
Les sorties
Ensuite, ajoutez simplement un
%n%
chaque fois que vous voulez une nouvelle ligne dans une instruction echo. C'est plus proche de votre\n
utilisé dans différentes langues.Panne
set n=
définit la variablen
égale à:^
Annule le prochain symbole à suivre:&
Signifie faire 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 à haute voix), donc aucun&&
n'est nécessaire.echo.
Continue l'instruction 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 ghetto, car batch n'est pas exactement le plus avancé des langages de script shell. Cela ne fonctionne que parce que le lot utilise mal les variables, ne désignant pas naturellement les entiers, les caractères, les flottants, les chaînes, etc.
Si vous êtes rusé, vous pourriez faire fonctionner cela avec d'autres choses. Par exemple, l'utiliser pour faire écho à un onglet
la source
echo.
lors de sa première tentative de recherche d'un fichier portant ce nom. Utilisez d'autres signes de ponctuation, tels queecho,
Lors de l'écho de quelque chose à rediriger vers un fichier, plusieurs commandes d'écho ne fonctionneront pas. Je pense que le redirecteur ">>" est un bon choix:
la source
(echo hello && echo world) > temp
mentionné par Nathan J. Brauer dans un commentaire aux travaux de réponse acceptés (actuels).Comme le suggère Grimtron - voici un exemple rapide pour le définir:
Production
la source
echo hello %newline%world
ligne, il n'y a pas d'espace entre les deux.echo "Hello %newline% world"
échoue car il est à l'intérieur des guillemets. Parce que ce n'est pas une vraie nouvelle ligne.Si vous devez mettre des résultats dans un fichier, vous pouvez utiliser
la source
Vous pouvez aussi faire comme ça,
La sortie sera,
Notez que lorsque cela est placé dans un fichier de commandes, «%» doit être doublé.
la source
*
omble chevalierSi quelqu'un vient ici parce qu'il cherche à faire écho à une ligne vierge d'un makefile MINGW, j'ai utilisé
@cmd /c echo.
simplement en utilisant
echo.
provoque leprocess_begin: CreateProcess(NULL, echo., ...) failed.
message d'erreur redouté .J'espère que cela aide au moins une autre personne là-bas :)
la source
Si l'on a besoin d'utiliser des \ n célèbres dans des littéraux de chaîne qui peuvent être passés à une variable, on peut écrire un code comme dans le script Hello.bat ci-dessous:
De cette façon, la sortie multiligne peut être préparée à un endroit, même dans un autre fichier scritpt ou externe, et imprimée à un autre.
Le saut de ligne est conservé dans la variable de nouvelle ligne . Sa valeur doit être remplacée après que la ligne d' écho soit développée, donc j'utilise setlocal enableDelayedExpansion pour activer les signes d'exclamation qui développent les variables lors de l'exécution. Et l'exécution remplace \ n par un contenu de nouvelle ligne (recherchez la syntaxe dans le jeu d'aide ). Nous pourrions bien sûr utiliser ! Newline! lors de la définition de 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 contenant le saut de ligne (Oui, Hello C3! Newline! P0 fonctionne de la même manière).
L'exemple ci-dessus peut être affiné en un sous-programme ou un lot autonome, utilisé comme
call:mlecho Hi\nI'm your comuter
:Veuillez noter que la barre oblique inverse supplémentaire n'empêchera pas le script d'analyser la sous-chaîne \ n.
la source
Cela a fonctionné pour moi, aucune expansion retardée nécessaire:
Il écrit une sortie comme ceci:
la source
echo asdf >myfile.txt
produira exactement les mêmes résultats.echo
ajoute une nouvelle ligne à la fin de la chaîne.Pour démarrer une nouvelle ligne en batch, il vous suffit d'ajouter "echo [", comme ceci:
la source
echo[.bat
echo.
c'est aussi une mauvaise solution.echo.
. Attendre des utilisateurs de votre script qu'ils suppriment des fichiers sur leur système simplement parce que votre script a besoin d'une nouvelle ligne ne me semble pas être une bonne conception.Les solutions Ken et Jeb fonctionnent bien.
Mais les nouvelles lignes sont générées avec uniquement un caractère LF et j'ai besoin de caractères CRLF (version Windows).
Pour cela, à la fin du script, j'ai converti LF en CRLF.
Exemple:
la source
Vous pouvez utiliser
@echo
(@echo + [espace] + [espace insécable])Remarque: l'espace insécable peut être obtenu avec Alt + 0160
J'espère que cela aide :)
[edit] Hmm tu as raison, j'en avais besoin dans un Makefile, ça marche parfaitement dedans. Je suppose que ma réponse n'est pas adaptée pour les fichiers batch ... Mon mauvais.
la source
ECHO ist eingeschaltet (ON).
pas de ligne vide, j'ai essayé à l'invite cmdCette solution fonctionne (testée):
Cela convertit les sauts de ligne isolés en combinaison de sauts de ligne de retour chariot.
la source
echo hello \n world
Je ne peux pas faire plus simple que:
la source