2010-08-26 13 views
7

Quello che segue è lo script batch ho scrittoAssegnazione carattere di nuova linea ad una variabile in uno script batch

@echo off 
setlocal enabledelayedexpansion 
set finalcontent= 
For /F "tokens=1-2* delims= " %%I in (abc.txt) do (
IF %%J EQU MAJORVER (
set currentline=%%I %%J %1 
set finalcontent=!finalcontent!!currentline! 
) ELSE IF %%J EQU MINORVER (
set currentline=%%I %%J %2 
set finalcontent=!finalcontent!!currentline! 
) ELSE IF %%J EQU BUILDNUM (
set currentline=%%I %%J %3 
set finalcontent=!finalcontent!!currentline! 
) ELSE (
set currentline=%%I %%J %%K%NL% 
set finalcontent=!finalcontent!!currentline! 
) 
) 
echo %finalcontent%>>xyz.txt 

Voglio un carattere di nuova riga aggiunto alla fine di ogni occorrenza del currentline variabile. Qualcuno può guidarmi su questo?

risposta

5

È possibile definire la nuova riga come segue:

set newline=^& echo. 

Quindi, è possibile utilizzare la nuova riga nella eco-dichiarazione, in questo modo: (non applicabile nella situazione descritta, però)

echo %finalcontent%%newline% 

oppure è possibile utilizzare la nuova riga in ogni set-dichiarazione, in questo modo: (mente l'accento circonflesso in più)

set finalcontent=!finalcontent!!currentline!^!newline! 

o similare:

set currentline=%%I %%J %1^%newline% 
+1

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. ;) –

16

È 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" 
) 
+1

Questo è caldo. Ho usato questo linguaggio per sempre e imparo cose completamente nuove quasi ogni settimana. Incredibile quante piccole stranezze ha. Grazie – user1167442

Problemi correlati