将换行符分配给批处理脚本中的变量

2024-01-12

以下是我写的批处理脚本

@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 的每次出现的末尾附加一个换行符。有人可以指导我吗?


您可以创建一个真正的换行符并将其分配给一个变量。

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>

Hints:
使用完全不同的换行变量定义格式通常会更好, 以避免无意中删除所需的空行。

(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"
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将换行符分配给批处理脚本中的变量 的相关文章

随机推荐