Comment puis-je insérer une nouvelle ligne dans une commande cmd.exe?

23

J'essaie d'exécuter une commande cmd.exe, avec un saut de ligne ou une nouvelle ligne dans le cadre de la commande, comme ci-dessous:

command -option:text  
whatever

Mais chaque nouvelle ligne exécute la commande, au lieu de continuer la commande sur la ligne suivante.

Alors, comment puis-je entrer un nouveau caractère de ligne ou créer une commande multiligne dans cmd.exe?

rudimenter
la source

Réponses:

19

Utilisez le ^personnage comme évasion:

command -option:text^

whatever

Je suppose que vous utilisez cmd.exe de Windows XP ou similaire. Ce n'est pas un DOS réel. Si vous utilisez un DOS réel (MS-DOS, Win3.1, Win95, Win98, WinME), je ne pense pas qu'il y ait une fuite pour les retours à la ligne. Vous devez exécuter un shell personnalisé. cmd.exe vous demandera "Plus?" chaque fois que vous appuyez sur Entrée avec un ^à la fin de la ligne, il vous suffit d'appuyer de nouveau sur Entrée pour réellement échapper / intégrer une nouvelle ligne.

Dark Android
la source
Trop cool, je ne savais pas ça.
TJ Crowder
1
Voici ce que vous suggérez qui me permet de saisir plus de texte sur une nouvelle ligne. Il ne conserve pas la nouvelle ligne. Ce que je veux, c'est qu'entre "texte" et "peu importe", c'est une nouvelle ligne. Quelque chose comme ceci: "text \ nwwhat"
rudimenter
Je crois que vous devez utiliser deux nouvelles lignes pour ce faire, mon mal de ne pas l'avoir réalisé dans mon article d'origine (maintenant édité)
Dark Android
1
Il convient de noter que si vous avez des espaces dans le texte, vous devrez les mettre entre guillemets. De plus, assurez-vous d'inclure la citation finale, sinon le signe d'insertion sera ignoré en tant que caractère d'échappement et traité comme du texte. Enfin, vous devrez mettre des guillemets autour du texte sur chaque ligne contenant des espaces (faites-le même si elle ne contient pas d'espaces pour être sûr), et mettez un signe d'insertion après le guillemet de fermeture pour chaque ligne qui continue.
Synetech
1
Je me suis retrouvé ici en essayant de trouver un moyen de mettre des retours à la ligne dans les commentaires d'une SHUTDOWN.EXEcommande. J'ai fini par utiliser quelque chose comme ça: shutdown -s -t 900 -c "foo bar"^ > Plus? "baz"^ > Plus? "test that."Ça a marché.
Synetech
4

Utilisez les codes Alt avec le pavé numérique

C:\>ver

Microsoft Windows [Version 6.3.9600]

C:\>echo Line1◙Line2 >con
Line1
Line2

C:\>

Ce caractère de saut de ligne peut être entré sous la forme d'un code Alt sur la CLI à l'aide du pavé numérique: avec NumLock activé, maintenez enfoncée la touche ALT et tapez 10 sur le pavé numérique avant de relâcher ALT. Si vous avez également besoin du CR, saisissez-les tous les deux avec Alt + 13 puis Alt + 10:♪◙

Remarque: cela ne fonctionnera pas dans un fichier batch.

Exemple d'utilisation:

Vous essayez de lire les variables d'environnement% PATH% ou% CLASSPATH% pour obtenir un aperçu rapide de ce qu'il y a et dans quel ordre - mais le mur de texte qui pathretourne est illisible. Ensuite, c'est quelque chose que vous pouvez saisir rapidement:

echo %path:;=◙% >con

Éditer:

Ajout de la >consolution de contournement découverte par Brent Rittenhouse pour les nouvelles versions de cmd.exe, où la méthode d'origine avait cessé de fonctionner.

Amit Naidu
la source
Cela ne semble pas fonctionner pour moi. Je me retrouve avec e2 99 aa e2 97 99passé. Une sorte de point de code unicode? Je vois quand même les personnages sur la ligne de commande. Aucune suggestion?
Brad
@Brad Je peux confirmer qu'il ne semble plus fonctionner dans le nouveau cmd.exe dans Windows 10 et même mon ancienne boîte Windows 7 ne se comportera plus de cette façon.
Amit Naidu
Bizarre! Je me demande si je peux déterrer un vieux cmd.exe de quelque chose ....
Brad
@Brad, j'ai juste essayé quelques choses et j'ai réalisé que vous pouvez obtenir cet ancien comportement si vous passez aux polices raster dans les propriétés de la console, au lieu des polices Lucida et True Type et cochez la Use legacy consolecase. Mais ça a l'air vraiment mauvais sur un moniteur haute résolution.
Amit Naidu
1
En fait, je pense que j'ai trouvé une solution qui fonctionne pour cela complètement dans n'importe quelle police! Si vous faites simplement écho à la ligne avec des caractères alt-10, puis la redirigez vers CON, cela fonctionnera! Par exemple: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONles parenthèses environnantes sont facultatives. Voici un exemple plus robuste de ce que vous pouvez faire avec cela (ET les retours chariot qui fonctionnent maintenant, et de manière complètement indépendante!): I.imgur.com/qqN37PH.png
Brent Rittenhouse
1

Je ne sais pas si cela fonctionnera pour vous mais en mettant & echo (l'espace suivant est important). entre chaque déclaration que vous souhaitez sur une nouvelle ligne. J'ai seulement essayé avec un simple fichier de chauve-souris de

echo %1

Ensuite, enregistré en tant que testNewLines.bat

Alors la ligne cmd

testNewLines first line&echo Second Line&echo Third line

Le résultat suivant a été renvoyé en écho

première ligne
deuxième ligne
troisième ligne

Haydar
la source
1

En développant la réponse d'Amit ( /superuser//a/1132659/955256 ), j'ai trouvé un moyen de le faire dans n'importe quelle police SANS utiliser la console héritée.

Tout ce que vous avez à faire est simplement de répéter la ligne avec des caractères alt-10, puis de la rediriger vers conet cela fonctionnera!

Par exemple, étant donné:

(écho New-line détecté rigghhhtt ◙ ^ <--- ICI!)> CON

edit: Fait amusant, il semble que vous pouvez mettre la redirection au début comme ceci:

> CON echo Nouvelle ligne détectée rigghhhtt ◙ ^ <--- ICI!

Bizarre, hein?

Vous obtiendrez une sortie de:


New-line detected rigghhhtt  
<-- HERE!

(Les parenthèses environnantes sont facultatives.)

Voici un exemple plus robuste de ce que vous pouvez faire avec ces retours chariot ET qui fonctionnent maintenant, et de manière complètement indépendante!:

Mieux encore, cela fonctionne si vous redirigez également vers un fichier!
(changez simplement > CONen> desired_output_file.txt

Prendre plaisir!

Brent Rittenhouse
la source
1

Les sorties de ^ sont enregistrables

set br= ^
<</br (newline)>>
<</br>>

exemple:

@echo off
setlocal enableExtensions enableDelayedExpansion
rem cd /D "%~dp0"


rem //# need 2 [/br], can't be saved to a var. by using %..%;
set br= ^



set "t=t1!br!t2!br!t3"

for /f "tokens=* delims=" %%q in ("!t!") do (
    echo %%q
)


:scIn
rem endlocal
pause
rem exit /b

; production:

t1
t2
t3
Press any key to continue . . .
ilias
la source
0

Je pense que vous ne pouvez pas faire cela à partir du cmd.exeshell Windows . ( Ce n'est pas DOS. )


Vous n'avez pas besoin d'un "shell personnalisé" complet pour cela. Vous aurez seulement besoin d'écrire quelque chose comme ça (exemple en Python ):

import subprocess
subprocess.call(["C:\\bin\\sometool.exe", "test\nwith\nnewlines"])

Ou Ruby:

Kernel::exec "C:\\bin\\sometool.exe", "test\nwith\nnewlines"

Vous voyez, ce n'est pas si difficile.

user1686
la source