首页 > 解决方案 > 设置包含多个值的变量,每个值都在新行上

问题描述

我有一个包含多个变量的批处理脚本,我想将这些变量的所有值添加到将在电子邮件正文中使用的新变量中。问题是我的所有值都写入一行,我希望每个变量都在自己的行上:

set EmailText=%var1% %var2% %var3% %var4%

EmailText 值都在一行上。我希望 var1、var2、var3 和 var4 的值都在自己的行上,这将加载到电子邮件应用程序中。

我尝试使用 ^ 字符,例如 %var1%^%var2% 但不起作用。

使用 echo 您可以使用 ^ 来执行此操作,但我不想回显它,我想将所有字符串(每个字符串都在自己的行)存储在电子邮件应用程序中使用的另一个变量中

谢谢

标签: batch-filecmd

解决方案


您需要<LF>在变量的定义中插入一个字符使用延迟扩展显示其值:

@echo off
setlocal EnableDelayedExpansion

set "var1=One"
set "var2=Two"
set "var3=Three"
set "var4=Four"

set ^"EmailText=%var1%^

%var2%^

%var3%^

%var4%^"

echo !EmailText!

尽管可以删除定义中变量值之间的空行,但所需的语法是丑陋和尴尬的......

编辑:新版本满足评论中所述的要求......

@echo off
setlocal EnableDelayedExpansion

for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a"

set "var1=One"
set "var2=Two"
REM set "var3=Three"
set "var4=Four"

set "EmailText="
for %%v in (var1 var2 var3 var4) do (
   if defined %%v set ^"EmailText=!EmailText!!%%v!!CR!^
%Do not remove this line%
^"
)

echo !EmailText!

输出:

One
Two
Four

推荐阅读