【问题标题】:Batch script - Echo variable with \n [duplicate]批处理脚本 - 带有 \n 的 Echo 变量 [重复]
【发布时间】:2017-01-06 18:14:13
【问题描述】:

我有一个这样的批处理脚本变量:

Set myvar=hello\nworld

当我回显 myvar 时,我从字面上得到了整个 hello\nworld。如何要求它解析我的 \n 并将其解释为换行符,以便我可以在两行中回显它?

【问题讨论】:

  • 你可以定义一个换行变量\n然后和set myvar=hello!\n!world一起使用

标签: batch-file


【解决方案1】:

如果您的问题真的是“如何在变量中嵌入换行符?”,那么这就是答案:

@echo off
setlocal EnableDelayedExpansion

set myvar=hello^

world
echo !myvar!

插入符号^ 字符意味着按字面意思取下一个字符,但在这种情况下,“下一个字符”只是一个新行,因此它在变量中按字面意思取,命令继续到下一行结束(像往常一样),所以set 命令在world 行之后结束。嵌入的<NL>只能通过延迟的!expansion!正确处理。

嵌入的<NL>在其他情况下被正确处理;例如:

for /F %%a in ("!myvar!") do echo %%a

【讨论】:

  • The embedded <NL> can only be correctly processed via delayed !expansion!. 并在下一行展示如何将其与 FOR 循环参数一起使用 :-)
【解决方案2】:

想象一下,有不同的编程语言,\n 并不总是意味着“换行”;)。

echo hello&echo.world 会做你想做的事,如果你想在一行代码中拥有它。否则,它是

echo hello
echo.world

在批处理中echo. 表示新行,或者如果. 后跟一些文本,则表示在新行中回显文本。

【讨论】:

  • 你不应该使用echo.留下一个空行;请改用echo/。请参阅:this post:“从技术上讲,ECHO。是对 CPU 周期的严重浪费。...当脚本遇到“ECHO”时,它不会立即打印空行,而是首先遍历每个目录在 %PATH% 上查看是否有一个名为 ECHO 的文件要执行”.
  • echo hello&echo.world 只是两个命令。我不会把它们算作换行符。而且您不能将它们保存在变量中
猜你喜欢
  • 2020-12-23
  • 2018-12-09
  • 2012-01-26
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 2017-12-14
  • 1970-01-01
相关资源
最近更新 更多