我有以下问题:我在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
这是我尝试过的事情:
for /f "tokens=* delims= " %%f in ("%varname%") do
给我语法错误,因为该变量已包含引号。
echo %varname%
仅输出变量的第一行。
有任何想法吗?
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.