我看到三种可能的解决方法。
1)构建组合多个for-parameters的行。
@echo off
SETLOCAL EnableDelayedExpansion
set "line="
for %%a in ("line1"
"line2"
"line3"
"line4"
) do set line=!line!%%~a
echo !line!
2)留下了“报价”在每行
@echo on
SETLOCAL EnableDelayedExpansion
set "line=line1 & x#"^
"line2 & a#"^
"line3 & b #"^
"line4 & c "
set "line=!line:#" "=!"
echo !line!
每一行的第一个空间是很重要的结束,因为插入符号可以作为多字符,但它也逃脱第一个字符,所以一个报价也会逃脱。
所以我在建立这条线之后替换了“#”。
编辑补充:3)消失的报价
setlocal EnableDelayedExpansion
echo "A very long line I want to !"=!^
split into two lines"
在我看来,这是最好方式,它可以作为解析器首先看到的报价,因此最后插入符的工作,因为它似乎超出了引号。
但是这个!"=!
表达式将扩展名为"=
的变量,但是这样的变量名称不能存在(等号仅能作为第一个字符出现),所以它扩展为空。
您还可以创建安全表达式,它们将始终脱离引号,如果行中存在引号或不引号,则它们将独立。
!"^"=!
echo This multiline works !"^"=!^
as expected
echo "This multiline works !"^"=!^
too"
如果你想避免延迟扩展,你也可以使用 - 对于回路状
for %%^" in ("") do (
echo "This multiline works %%~"^
too"
)
来源
2011-01-10 09:05:19
jeb
答案并不简单,但这些都是一些很酷的技巧!我希望我可以有多个upvotes。谢谢! – 2011-01-10 14:45:23
我真的很喜欢方法#1。这种方法有什么问题吗? – djangofan 2012-09-14 00:18:30