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

Batch file 将换行符分配给批处理脚本中的变量,batch-file,Batch File,下面是我编写的批处理脚本 @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 ( s

下面是我编写的批处理脚本

@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语句中使用换行符,如下所示:(但不适用于概述的情况)

或者可以在每个set语句中使用换行符,如下所示:(注意额外的插入符号)

或类似地:

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是完成“行”所必需的

我经常删除其中一个空行,然后我一直在搜索为什么我的程序不再工作

偏执狂版本还会检查换行变量中是否有空格或其他垃圾

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,因为我后来发现它可以工作,但不能用于EnableDelayedExpansion(AKA!var!而不是%var%)。可能需要考虑将其添加到顶部的答案中。所以我可以投票,我不能改变我的投票,除非答案被编辑不是-1,但这不是一个真正的
\n
,而是一个热门的宏。我一直在使用这种语言,几乎每周都会学到全新的东西。令人惊讶的是它有多少小怪癖。Thanks我认为OP想要存储并构建一个包含换行符的字符串,然后将整个字符串推送到一个文本文件中,这与我试图实现的非常相似。你建议的事情对我不起作用…@LPVOID解决方案正是针对构建一个包含换行符的字符串的情况<代码>对我不起作用对问题的描述不是很有帮助。
(设置为LF=^⏎%=此行为空=%⏎)在交互模式下不起作用,但在
*.bat
文件中起作用。(这对读者来说只是一点额外的细节。答案是惊人的。)@Sasha你是对的,它失败了,因为
%=此行为空=%
没有在命令行上下文中删除。但是如果你删除百分比部分,它会再次起作用。“(设置为LF=^⏎⏎)
set LF=^


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

uses two lines
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"
)