在批处理脚本
问题描述:
下分配换行符变量是批处理脚本我写在批处理脚本
@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的每一次出现的末尾追加一个换行符。任何人都可以指导我吗?
答
您可以定义新行如下:
set newline=^& echo.
然后,您可以使用换行符回声语句,像这样:(并不适用于列出的情况,不过)
echo %finalcontent%%newline%
,或者您可以使用新行中的每个设置语句,像这样:(介意额外插入符号)
set finalcontent=!finalcontent!!currentline!^!newline!
或类似的:
set currentline=%%I %%J %1^%newline%
答
您可以创建一个真正的换行符并将其分配给一个变量。
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
我最初把它标记为-1,因为后来我发现这个方法可行,但不能用EnableDelayedExpansion(AKA!var!代替%var%)。可能要考虑在顶部以粗体添加回答。所以我可以放弃这一点,除非答案被编辑,否则我不能改变我的投票。 ;) – 2015-01-14 18:02:36