2010-08-26 2 views
7

Ниже приведен пакетный сценарий я написалНазначение символа новой строки к переменной в пакетном сценарии

@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 

Я хочу, чтобы символ новой строки добавляется в конце каждого вхождения переменной CurrentLine. Может ли кто-нибудь помочь мне в этом?

ответ

5

Вы можете определить строку следующим образом:

set newline=^& echo. 

Затем, вы можете использовать символ новой строки в эхо-заявления, как это: (не применяется в описанной ситуации, однако)

echo %finalcontent%%newline% 

или вы можете использовать символ новую строку в каждом набор-заявлении, как это: (ум дополнительной каретки)

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

или аналогично:

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

Первоначально я обозначил это как -1, потому что позже выяснил, что это работает, но не с EnableDelayedExpansion (AKA! Var! Вместо% var%). Возможно, вы захотите добавить это к своему ответу сверху, выделенному полужирным шрифтом. Поэтому я могу поддержать это, я не могу изменить свой голос, если ответ не будет отредактирован. ;) –

16

Вы можете создать настоящий символ новой строки и присвоить его переменной.

setlocal EnableDelayedExpansion 
set LF=^ 


rem TWO empty lines are required 
echo This text!LF!uses two lines 

новой строки лучше всего работает с замедленным расширением, вы можете также использовать его с расширением процента, но это немного сложнее.

set LF=^ 


rem TWO empty lines are required 
echo This text^%LF%%LF%uses two lines 
echo This also^ 

uses two lines 

Как это работает?
Карет - это символ побега, он выходит из следующего символа и сам удаляется.
Но если следующий символ является линией перевода строки, также удаляется линия перевода, и только следующий символ будет эффективно экранирован (даже если это также строка перевода).

Следовательно, требуются две пустые строки, LF1 игнорируется. LF2 экранирован и LF3 необходим для завершения «линии».

set myLinefeed=^<LF1> 
<LF2> 
<LF3> 

Подсказки:
Это часто лучше использовать совершенно другой формат новой строки определения переменной, избежать ненароком удаления требуемых пустых строк.

(SET LF=^ 
%=this line is empty=% 
) 

Я удалил часто одну из пустых строк, а затем я искал навсегда, почему моя программа больше не работала.

И параноидальная версия проверяет также переменную новой строки для пробелов или другого мусора.

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

Это жарко. Я использую этот язык навсегда, и я изучаю совершенно новые вещи почти еженедельно. Удивительно, сколько у него маленьких причуд. благодаря – user1167442

Смежные вопросы