batch-file – 如何在Windows批处理文件中将双引号行拆分为多行?

Windows批处理文件中的长命令可以使用^如 Long commands split over multiple lines in Windows Vista batch (.bat) file中提到的那样拆分为多行。

但是,如果插入符号位于双引号字符串中,则不起作用。例如:

echo "A very long line I want to ^
split into two lines"

这将打印“我想要的非常长的行^并告诉我split是一个未知的命令。

有办法解决这个问题吗?

我看到三种可能的解决方法

1)构建组合多个参数的线。

@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!

每行中的第一个空格很重要,因为插入符号用作多行字符但它也会转义第一个字符,因此引用也会被转义。
所以我在构建线之后替换了那个unnessary#“”。

编辑补充: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-Loop之类的

for %%^" in ("") do (
echo "This multiline works %%~"^
too"
)

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...