J'essaie d'exécuter une commande sur 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 la continuer sur la ligne suivante.
Alors, comment puis-je entrer un nouveau caractère de ligne ou créer une commande multiligne dans cmd.exe?
Utilisez le caractère ^
comme échappement:
command -option:text^
whatever
Je suppose que vous utilisez cmd.exe à partir de Windows XP ou similaire. Ce n'est pas le DOS réel. Si vous utilisez le DOS actuel (MS-DOS, Win3.1, Win95, Win98, WinME), alors je ne crois pas qu'il y ait d'échappatoire 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 à nouveau sur Entrée pour réellement sortir/insérer une nouvelle ligne.
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 saisi en tant que code alternatif sur la CLI à l'aide du pavé numérique: avec la touche Verrouillage numérique enfoncée, maintenez la touche ALT enfoncée et tapez 10 avant libérer 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 de commandes.
Exemple de cas d'utilisation:
Vous essayez de lire les variables d'environnement% PATH% ou% CLASSPATH% pour avoir un aperçu rapide de ce qu'il contient et dans quel ordre - mais le mur de texte renvoyé par path
est illisible. Ensuite, vous pouvez taper rapidement quelque chose:
echo %path:;=◙% >con
Modifier:
Ajout de la solution de contournement >con
découverte par Brent Rittenhouse pour les versions plus récentes de cmd.exe, dans lesquelles la méthode d'origine avait cessé de fonctionner.
Les sorties de ^ sont sauvegardables
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
; sortie:
t1
t2
t3
Press any key to continue . . .
Je ne sais pas si cela fonctionnera pour vous mais en mettant & echo (l'espace suivant est important). entre chaque déclaration que vous voulez sur une nouvelle ligne. Je n’ai essayé cela qu’avec un simple fichier de
echo %1
Puis enregistré cela sous le nom testNewLines.bat
Alors alors la ligne cmd
testNewLines first line&echo Second Line&echo Third line
Résultat: les éléments suivants sont renvoyés
première ligne
deuxième ligne
Troisième ligne
En développant la réponse d’Amit ( https://superuser.com/a/1132659/955256 ), j’ai trouvé un moyen de le faire dans n’importe quelle police SANS utiliser le console héritée.
Tout ce que vous avez à faire est simplement de faire écho la ligne avec alt-10 caractères, puis de le rediriger vers con
et cela fonctionnera!
Par exemple, étant donné:
(echo New-line détecté rigghhhtt ◙ ^ <--- ICI!)> CON
edit: Fait amusant, il semble que vous puissiez mettre la redirection au début de la manière suivante:
> 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.)
Here est un exemple plus robuste de ce que vous pouvez faire avec cet AND. Les retours à la ligne fonctionnent désormais de manière totalement indépendante !:
Mieux encore, cela fonctionne si vous redirigez également vers un fichier!
(remplacez simplement > CON
par > desired_output_file.txt
Prendre plaisir!
Je crois que vous ne pouvez pas faire cela à partir du shell Windows cmd.exe
. ( C'est pas DOS. )
Vous n'avez pas besoin d'un "shell personnalisé" complet pour cela. Vous aurez seulement besoin d'écrire quelque chose comme ceci (exemple dans 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.