2010-08-26 153 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%)。可能要考慮在頂部以粗體添加回答。所以我可以放棄這一點,除非答案被編輯,否則我不能改變我的投票。 ;) – 2015-01-14 18:02:36

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 2017-01-04 18:30:01