È possibile creare un carattere di nuova fine reale e assegnarlo a una variabile.
setlocal EnableDelayedExpansion
set LF=^
rem TWO empty lines are required
echo This text!LF!uses two lines
La nuova linea migliore lavora con ritardo di espansione, è possibile utilizzarlo anche con l'espansione per cento, ma allora è un po 'più complessa.
set LF=^
rem TWO empty lines are required
echo This text^%LF%%LF%uses two lines
echo This also^
uses two lines
Come funziona?
Il cursore è un carattere di escape, sfugge il carattere successivo e si è rimosso.
Ma se il carattere successivo è un ritorno a capo l'avanzamento riga viene rimosso anche e solo il carattere successivo è effectivly sfuggito (anche se questo è anche un avanzamento riga).
Pertanto, due righe vuote vengono richiesti, LF1 viene ignorato LF2 è sfuggito e LF3 è necessario da finire "linea".
set myLinefeed=^<LF1>
<LF2>
<LF3>
consigli:
È spesso preferibile utilizzare un formato molto diversa della definizione variabile nuova riga, per evitare inavvertitamente eliminazione delle righe vuote richiesti.
(SET LF=^
%=this line is empty=%
)
ho rimosso per spesso una delle righe vuote e poi ho cercato sempre il motivo per cui il mio programma non funziona più.
E i paranoici controlli di versione anche la variabile di nuova riga per spazi bianchi o altra immondizia.
if "!LF!" NEQ "!LF:~0,1!" echo Error "Linefeed definition is defect, probably multiple invisble whitespaces at the line end in the definition of LF"
FOR /F "delims=" %%n in ("!LF!") do (
echo Error "Linefeed definition is defect, probably invisble whitespaces at the line end in the definition of LF"
)
Originariamente ho segnato questo come un -1 perché ho poi scoperto che questo funziona, ma non con enabledelayedexpansion (AKA! Var! Anziché% var%). Potrebbe voler considerare l'aggiunta di questo alla tua risposta in alto in grassetto. Quindi posso revocarlo, non posso cambiare il mio voto se la risposta non viene modificata. ;) –