2009-11-12 9 views
12

È possibile inserire un nuovo carattere di linea in una riga di eco in un file batch?È possibile inserire un nuovo carattere di linea in una riga di eco in un file batch?

Fondamentalmente voglio essere in grado di fare l'equivalente di:

echo Hello\nWorld 

È possibile farlo abbastanza facilmente in Linux, ma non riesco a capire come farlo in Windows.

+2

http://stackoverflow.com/questions/132799/how-can-you-echo-a-newline -in-batch-file penso che risponda – Andrew

+0

Ahaha, sì, quasi la stessa risposta che ho trovato – Benj

risposta

33

echo. stamperà una riga vuota.

Esempio:

echo Hello 
echo. 
echo world 

stampe

Hello 

world 
+5

' echo' è ~ 20 volte più lento di ' echo ('e fallisce completamente quando esiste un file con il nome 'echo' senza estensione. Quindi echo (' è più sicuro e più veloce – jeb

+4

'echo (' non funziona in DOS 6.22. (Anche se questo è probabilmente un pubblico minimo a questo punto.) –

+0

@JimDavis +1 per compatibilità DOS 6.22 –

-1

Penso che non sia possibile. Potresti provare solo un carattere ASCII a questo: http://www.asciitable.com/ Ma questo potrebbe mandare in crash il tuo file batch.

+0

Yeh, ho provato a farlo, non ha funzionato tristemente – Benj

5

Ahaha,

Credo di aver lavorato fuori qualcosa di abbastanza vicino ...

echo hello&echo.&echo world 

Produce:

ciao

mondo

13

Dopo un po 'di sperimentazione Ho scoperto che è possibile farlo senza emettere due ec separati ho comandi come descritto in How can you echo a newline in batch files?. Tuttavia per farlo funzionare è necessario un editor di testo che non traduca CR in CR + LF.

Tipo:

@echo First Line 

poi con NumLock, tenere premuto il tasto ALT e digitare 10 sul tastierino numerico prima di rilasciare ALT (si deve usare la tastiera numerica, non i tasti numerici della fila superiore). Questo inserirà un carattere CR. Quindi digitare la seconda riga. A seconda del vostro editor e come gestisce CR rispetto al CR + LF si può ottenere:

@echo First Line◙Second Line 

o

@echo First Line 
Second Line 

Questo funziona da linea di comando e lavorerà in un file batch fino a quando il l'editor di testo non converte CR in CR + LF (che gli editor di Windows/DOS fanno a meno che non li si configuri). Se CR viene convertito in CR + LF o se si utilizza solo LF, la seconda riga viene interpretata come un nuovo comando.

Tuttavia, non riesco a capire perché questo sarebbe preferibile rispetto al semplice:

@echo First Line 
@echo Second Line 
+0

Divertente, pensavo di aver provato questo, ma ho appena provato di nuovo e funziona davvero. – Benj

+0

Non so quale sistema operativo si è provato, ma la soluzione non può funzionare, come _raw_ CR viene completamente rimosso dal parser batch. Nel migliore dei casi un CR riporterebbe il cursore su linea inizia, non alla riga successiva – jeb

+0

@jeb: Ciò dipenderebbe interamente da come la shell dei comandi gestisce il CR. L'ho provato in Windows cmd.exe (dato che è così che viene taggata la domanda), e come ha commentato Benj, ha funzionato per lui. cmd.exe esegue presumibilmente la traduzione in CR + LF.La maggior parte degli emulatori di terminale supporterà traduzioni simili per configurazione, ma hai ragione che la tecnica non è generalmente applicabile, ma non era così che veniva presentata la domanda. Rimango confuso sul motivo per cui qualcuno vorrebbe farlo, ma eccolo! – Clifford

0

ho trovato questo molto informativo, così ha voluto inviare un esempio migliore utilizzando le risposte fornite

Questo fornisce un messaggio d'aiuto ben formattata

if "%1" == """" goto usage 

:usage 
echo USAGE: %0 [Set properties using -D flag] [Ant Task to Run] & 
echo.                & 
echo  Availble Command line properties      & 
echo  --------------------------------      & 
... 
17

Può essere risolto con un singolo eco.

Per questo è necessario un carattere di fine riga \n. Esistono diversi modi per ottenere una nuova linea nel echo

1) Questo esempio utilizza il cursore multilinea per aggiungere una nuova riga nel comando, è necessario
riga vuota

echo Hello^ 

world 

2) L' la soluzione successiva crea prima una variabile che contiene un carattere di avanzamento riga singola.

set \n=^ 


rem ** Two empty lines are required 

o creare la nuova linea con una versione leggermente modificata

(set \n=^ 
%=DONT REMOVE THIS=% 
) 

E utilizzare questo personaggio con ritardato l'espansione

setlocal EnableDelayedExpansion 
echo Hello!\n!world 

Per utilizzare un carattere di avanzamento linea con il per cento espansione è necessario creare una sequenza più complessa

echo Hello^%\n%%\n%world 

Oppure si può utilizzare il New line hack

REM Creating a Newline variable (the two blank lines are required!) 
set \n=^ 


set NL=^^^%\n%%\n%^%\n%%\n% 
REM Example Usage: 
echo There should be a newline%NL%inserted here. 

Ma solo l'espansione ritardata del ritorno a capo funziona affidabile, anche all'interno di citazioni.

+0

+1 per aver portato questo dal retro della tomba ;-) – Benj

+0

+1, ottimo per avere la possibilità di utilizzare il line-feed in una variabile con espansione (percentuale) immediata; tuttavia, esiste un modo per espandere un carattere carriage-return nello stesso modo senza un'espansione ritardata? – aschipfl

+0

@aschipfl No, non è possibile, poiché tutti i ritorni a capo vengono rimossi subito dopo la fase di espansione percentuale e non c'è modo di sfuggirli – jeb

2

echo. o eco (

farà la nuova riga vuota. Spero che questo è utile.

+1

Ma questo non risponde alla domanda su come aggiungere una nuova linea tra due testi. – jeb

Problemi correlati