batch-file - 将换行符附加到要编辑的 "echo"变量

标签 batch-file variable-expansion

在过去的 12 年里,我一直在 Linux 中工作,之前使用过 Windows 和命令行,并且最近不得不恢复那些批处理文件技能以获得一个易于使用/编辑的实用程序。但是,我在找出如何使用换行符构建字符串变量时遇到了一些问题(相当于 Linux 的 echo -e "Line1\nLine2")

基本上,我的实用程序会询问用户三个问题并检查输入的有效性。如果有效性失败,每个输入都有一个略有不同的“错误消息”。然后我检查 errMsg 变量是否包含任何内容,如果包含,它会列出来自 3 次有效性检查的整理后的错误消息。除了错误消息在一行之外,这一切都完美无缺,我想将每个错误放在它自己的行上。然后我“仅仅”在字符串中添加换行符……这就是这个问题的症结所在。

我用过 this链接作为引用点并使用基本字符串,新行将按预期出现。但是,当我使用变量时,新行不会出现,我希望有人能向我解释原因。

我有以下代码片段

@echo off
setlocal enableextensions enabledelayedexpansion

set \n=^


set NL=^^^%\n%%\n%^%\n%%\n%

echo This does indeed put in a newline%NL%and this is the 2nd line
:: output follows:
::This does indeed put in a newline
::and this is the 2nd line

set var=Line1%NL%
set var=%var%Line2%NL%
:: output follows:
::Line1Line2

set errMsg=This would be the first custom error message%NL%
set errMsg=%errMsg%This would be the second custom error message%NL%
set errMsg=%errMsg%This would be the third custom error message%NL%
:: output follows
::This would be the first custom error messageThis would be the third custom error message

显然,此时我希望 Line1Line2 示例分为两行,然后最后一个示例将所有自定义错误消息分为三行(而实际上,它也缺少第二个/中间的错误消息)

任何人都可以向我解释为什么这没有按预期工作吗?我想知道它是否与延迟扩展有关(我相信我需要:这个片段是一个更长的文件的一部分,它确实需要延迟扩展)。有没有更好的(或仅仅是替代的)方法来完成我正在寻找的东西?!

最佳答案

创建一个新的行变量是一个好的开始。但是你应该以不同的方式使用它。
百分比扩展不能很好地处理变量中的换行符,可以做到,但它非常复杂。

但是延迟扩展完美地适用于任何角色

@echo off
setlocal EnableDelayedExpansion

(set \n=^
%=empty line=%
)

echo Line1!\n!Line2

set "multiline_var=First Line!\n!Second Line"

echo !multiline_var!

关于batch-file - 将换行符附加到要编辑的 "echo"变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70808216/

相关文章:

python - 如何对文件夹中的所有文件运行批处理文件?

bash - 如何检查目录中是否存在名称为 "template"的文件?

arrays - 如何从 Powershell 中的值数组创建文本文件

bash - mv 不识别通配符/变量扩展

linux - 变量/参数扩展中的字符串项

windows - 在不回显命令的情况下使用批处理文件超时?

batch-file - ffmpeg使用drawtext并一起选择

SQL 在准备好的语句中选择不同项目的组?

windows - 如何从批处理文件中的函数返回值?

html - 将 get-content 放入 html 电子邮件的数组中