【发布时间】:2017-01-06 18:14:13
【问题描述】:
我有一个这样的批处理脚本变量:
Set myvar=hello\nworld
当我回显 myvar 时,我从字面上得到了整个 hello\nworld。如何要求它解析我的 \n 并将其解释为换行符,以便我可以在两行中回显它?
【问题讨论】:
-
你可以定义一个换行变量
\n然后和set myvar=hello!\n!world一起使用
标签: batch-file
我有一个这样的批处理脚本变量:
Set myvar=hello\nworld
当我回显 myvar 时,我从字面上得到了整个 hello\nworld。如何要求它解析我的 \n 并将其解释为换行符,以便我可以在两行中回显它?
【问题讨论】:
\n然后和set myvar=hello!\n!world一起使用
标签: batch-file
如果您的问题真的是“如何在变量中嵌入换行符?”,那么这就是答案:
@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 循环参数一起使用 :-)
想象一下,有不同的编程语言,\n 并不总是意味着“换行”;)。
echo hello&echo.world 会做你想做的事,如果你想在一行代码中拥有它。否则,它是
echo hello
echo.world
在批处理中echo. 表示新行,或者如果. 后跟一些文本,则表示在新行中回显文本。
【讨论】:
echo.留下一个空行;请改用echo/。请参阅:this post:“从技术上讲,ECHO。是对 CPU 周期的严重浪费。...当脚本遇到“ECHO”时,它不会立即打印空行,而是首先遍历每个目录在 %PATH% 上查看是否有一个名为 ECHO 的文件要执行”.
echo hello&echo.world 只是两个命令。我不会把它们算作换行符。而且您不能将它们保存在变量中