【问题标题】:Passing around multi-line strings传递多行字符串
【发布时间】:2011-08-12 13:52:31
【问题描述】:

我正在尝试创建一个批处理文件,该文件传递一个带有换行符的字符串,但它无法正常工作。字符串的延续作为新命令执行。

是否有编码换行符或使其工作?

【问题讨论】:

  • 您是构造多行值还是从其他地方读取?如果是前者; stackoverflow.com/questions/3294599/…
  • 不要将 DOS 与 Windows 中的某些命令解释器混淆。 DOS 是一个操作系统。

标签: windows batch-file cmd


【解决方案1】:

您可以使用插入符号直接创建多行字符串(需要一个空行)。

setlocal EnableDelayedExpansion
set multiLine=This is a ^

multiline text^

line3
echo !multiLine!

或者你可以先创建一个换行符。

setlocal EnableDelayedExpansion
set LF=^


rem Two empty lines are required
set multiLine=This is a!LF!multiline text!LF!line3
echo !multiLine!

可以在Explain how dos-batch newline variable hack works找到有关其工作原理的说明

【讨论】:

  • 注意,似乎需要使用延迟扩展;这似乎不适用于常规变量扩展。
  • @jpmc26 是的,对于百分比扩展,您需要换行变量 hack,因为换行符通常会停止批处理解析器
  • @jeb 啊,我明白了。如果您不使用延迟扩展,则运行时会在解释命令之前扩展变量,这会导致命令中出现换行符。因此它将命令解释为在换行符处结束。通过使用延迟扩展,运行时在解释命令之前不会扩展变量,因此换行符不会影响运行时解释它的方式。对吗?
【解决方案2】:

扩展至jeb answer , 将 !LF!^ 添加到每一行会很容易

setlocal EnableDelayedExpansion
set LF=^



set multiLine=This is a!LF!^
multiline text!LF!^
line3
echo !multiLine! 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多