小编典典

将多行环境变量拆分为几行

jenkins

我有以下问题:我在Jenkins服务器上执行Windows批处理文件,并且不得不将多行环境变量(通过Jenkins参数设置)拆分为单行。每行是另一个程序的参数列表的一部分:

Jenkins文本框参数:

-foo 224 -bar "Some parameter with spaces"
-foo 225 -bar "another param"

应该在詹金斯内部引发以下调用:

myprog.exe -baz 0 -meow -foo 224 -bar "Some parameter with spaces"
myprog.exe -baz 0 -meow -foo 225 -bar "another param"

我尝试将其拆分,for /F但没有成功。搜索没有发现任何有用的信息,我尝试的任何操作都给了我语法错误,或者只是打印了第一行。

这是我尝试过的事情:

for /f "tokens=* delims= " %%f in ("%varname%") do

给我语法错误,因为该变量已包含引号。

echo %varname%

仅输出变量的第一行。

有任何想法吗?


阅读 381

收藏
2020-07-25

共1个答案

小编典典

FOR / F命令将插入变量中的LF作为行分隔符(这是FOR / F命令的自然行为),因此,使用FOR / F处理此类变量不需要任何其他操作:

@echo off
setlocal EnableDelayedExpansion

rem Create a variable containing line breaks.
set LF=^
%empty line 1/2%
%empty line 2/2%
set "str=The quick brown!LF!fox jumps over!LF!the lazy dog."

set line=0
for /F "delims=" %%a in ("!str!") do (
   set /A line+=1
   echo Line !line!: %%a
)

这里的关键是用!exclamationMarks !;扩展变量。否则,LF将削减%value%。另外,如果要用LF分隔 完整的行 ,请使用“
delims =”。输出示例:

Line 1: The quick brown
Line 2: fox jumps over
Line 3: the lazy dog.
2020-07-25