设置变量,每个变量在新行中包含多个值

时间:2018-08-17 12:35:05

标签: batch-file cmd

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

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

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

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

使用echo可以使用^来做到这一点,但我不想将其回显,我想将所有字符串存储在一个单独的行中,并将其存储在电子邮件应用程序中使用的另一个变量中

谢谢

2 个答案:

答案 0 :(得分:3)

您需要在变量的定义中插入<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!

尽管可以删除定义中变量值之间的空行,但所需的语法丑陋且笨拙...

编辑:满足注释中所述的 new 要求的新版本...

@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

答案 1 :(得分:1)

以下脚本测试每个变量以查看其是否具有内容,并将字符串附加在一起。如果文本中可以出现分号,请选择另一个字符作为换行符。

@echo off
setlocal EnableDelayedExpansion

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

SET LF=^


REM Do not remove blank lines for LF.

set "EmailText="
IF NOT "%var1%" == "" (SET "EmailText=%EmailText%%var1%;")
IF NOT "%var2%" == "" (SET "EmailText=%EmailText%%var2%;")
IF NOT "%var3%" == "" (SET "EmailText=%EmailText%%var3%;")
IF NOT "%var4%" == "" (SET "EmailText=%EmailText%%var4%")

SET "EmailText=%EmailText:;=!LF!%"

echo !EmailText!
EXIT /B 0

示例运行:

12:56:51.62  C:\src\t\emailtext
C:>emailtext.bat >t.txt

12:57:07.74  C:\src\t\emailtext
C:>type t.txt
One
Two
Three
Four