Come posso inserire una nuova riga in un comando cmd.exe?


23

Sto cercando di eseguire un comando su cmd.exe, con un'interruzione di riga o nuova riga come parte del comando, come di seguito:

command -option:text  
whatever

Ma ogni nuova riga esegue il comando, invece di continuare il comando sulla riga successiva.

Quindi, come posso inserire un nuovo carattere di linea o creare un comando multilinea in cmd.exe?



Risposte:


19

Usa il ^personaggio come via di fuga:

command -option:text^

whatever

Suppongo che tu stia utilizzando cmd.exe da Windows XP o simili. Questo non è un vero DOS. Se si utilizza DOS effettivo (MS-DOS, Win3.1, Win95, Win98, WinME), non credo che ci sia una via di fuga per i newline. Dovresti eseguire una shell personalizzata. cmd.exe ti chiederà "Altro?" ogni volta che premi invio con ^a alla fine della riga, premi di nuovo Invio per uscire / incorporare una nuova riga.


Troppo bello, non lo sapevo.
TJ Crowder,

1
Questo è ciò che mi suggerisce è che mi permette di inserire più testo su una nuova riga. Non preserva la nuova riga. Quello che voglio è che tra "testo" e "qualunque cosa" sia una nuova riga. Qualcosa del genere: "text \ nwhatever"
rudimenter

Credo che tu debba usare due newline per farlo, il mio male per non averlo realizzato nel mio post originale (ora modificato)
Darth Android

1
Va notato che se hai spazi nel testo, dovrai racchiuderli tra virgolette. Inoltre, assicurati di includere la citazione finale, altrimenti il ​​cursore verrà ignorato come carattere di escape e trattato come un testo. Infine, dovrai inserire le virgolette attorno al testo su ciascuna riga contenente spazi (fallo anche se non contiene spazi per sicurezza) e inserire un punto di inserimento dopo la virgoletta di chiusura per ogni riga che continua.
Synetech,

1
Sono finito qui cercando di trovare un modo per inserire nuove righe nei commenti di un SHUTDOWN.EXEcomando. Ho finito per usare qualcosa del genere: shutdown -s -t 900 -c "foo bar"^ > Altro? "baz"^ > Di più? "test that."Ha funzionato.
Synetech,

4

Utilizzare i codici Alt con il tastierino numerico

C:\>ver

Microsoft Windows [Version 6.3.9600]

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

C:\>

Quel carattere di avanzamento riga può essere inserito come codice Alt sulla CLI usando il tastierino numerico: con Bloc Num attivo, tenere premuto ALT e digitare 10 sul tastierino numerico prima di rilasciare ALT. Se hai bisogno anche del CR, digitarli entrambi con Alt + 13 e poi Alt + 10:♪◙

Nota: questo non funzionerà in un file batch.

Esempio di utilizzo:

Stai cercando di leggere le variabili di ambiente% PATH% o% CLASSPATH% per ottenere una rapida panoramica di cosa c'è e in quale ordine, ma il muro di testo che pathritorna è illeggibile. Quindi questo è qualcosa che puoi digitare rapidamente:

echo %path:;=◙% >con

Modificare:

Aggiunta la >consoluzione alternativa che Brent Rittenhouse ha scoperto per le versioni più recenti di cmd.exe, in cui il metodo originale aveva smesso di funzionare.


Questo non sembra funzionare per me. Alla fine ho e2 99 aa e2 97 99superato. Una sorta di punto di codice unicode? Vedo però i personaggi entrare nella riga di comando. Eventuali suggerimenti?
Brad,

@Brad Posso confermare che non sembra funzionare più nel nuovo cmd.exe in Windows 10 e anche la mia vecchia scatola di Windows 7 non si comporterà più in questo modo.
Amit Naidu,

Strano! Mi chiedo se riesco a scavare un vecchio cmd.exe da qualcosa ....
Brad

@Brad, ho appena provato e poche cose e ho capito che puoi ottenere quel vecchio comportamento se passi ai caratteri raster nelle proprietà della console, invece dei caratteri Lucida e True Type e spunta la Use legacy consolecasella. Ma sembra davvero male su un monitor ad alta risoluzione.
Amit Naidu,

1
In realtà, penso di aver trovato una soluzione che funziona completamente con QUALSIASI font! Se fai semplicemente eco alla linea con i caratteri alt-10 e poi lo reindirizzi su CON funzionerà! Ad esempio: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONla parentesi circostante è facoltativa. Ecco un esempio più solido di ciò che puoi fare con questo (AND ritorni a capo
Brent Rittenhouse,

1

Non so se questo funzionerà per te ma inserendo & echo (il seguente spazio è importante). tra ogni istruzione che si desidera su una nuova riga. L'ho provato solo con un semplice file bat di

echo %1

Quindi l'ho salvato come testNewLines.bat

Quindi la linea cmd

testNewLines first line&echo Second Line&echo Third line

Il risultato è stato l'eco di seguito

prima riga
seconda riga
Terza riga


1

Espandendo la risposta di Amit ( /superuser//a/1132659/955256 ) ho trovato il modo di farlo in qualsiasi carattere SENZA utilizzare la console legacy.

Tutto quello che devi fare è semplicemente echeggiare la linea con i caratteri alt-10 e quindi reindirizzarlo a cone funzionerà!

Ad esempio, dato:

(eco Nuova riga rilevata rigghhhtt ◙ ^ <--- QUI!)> CON

modifica: fatto divertente, sembra che tu possa mettere il reindirizzamento all'inizio in questo modo:

> CON echo Rigghhhtt rilevato nuova riga ◙ ^ <--- QUI!

Strano, eh?

Otterrai un output di:


New-line detected rigghhhtt  
<-- HERE!

(Le parentesi circostanti sono opzionali.)

Ecco un esempio più solido di cosa puoi fare con questo ritorno a capo AND che ora funziona e in modo completamente indipendente !:

Ma soprattutto, funziona anche se si reindirizza a un file!
(cambia semplicemente > CONin> desired_output_file.txt

Godere!


1

L'output di ^ è salvabile

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

esempio:

@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

; produzione:

t1
t2
t3
Press any key to continue . . .

0

Credo che non puoi farlo dalla cmd.exeshell di Windows . ( È non DOS. )


Non è necessaria una "shell personalizzata" completa per questo. Dovrai solo scrivere qualcosa del genere (esempio in Python ):

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

O Ruby:

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

Vedi, non è così difficile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.