你怎么能在batch file中回显换行符?
你怎么能从你的batch file输出插入一个换行符?
我想做一些事情:
> echo hello\nworld
哪个会输出:
你好
世界
echo hello & echo.world
这意味着你可以定义& echo.
作为换行的常数。
使用:
echo hello echo. echo world
在这里,创build一个.bat文件,其中包含以下内容:
@echo off REM Creating a Newline variable (the two blank lines are required!) set NLM=^ set NL=^^^%NLM%%NLM%^%NLM%%NLM% REM Example Usage: echo There should be a newline%NL%inserted here. echo. pause
你应该看到如下的输出:
There should be a newline inserted here. Press any key to continue . . .
您显然只需要REM语句之间的代码。
有一个标准的functionecho:
在cmd / bat-files中写空行,这在你的cmd输出中模拟了一个新行:
@echo off @echo line1 @echo: @echo line2
上面引用的cmd-file的输出:
line1 line2
像Ken的答案一样,但是使用了延迟扩展。
setlocal EnableDelayedExpansion (set \n=^ %=Do not remove this line=% ) echo Line1!\n!Line2 echo Works also with quotes "!\n!line2"
首先创build一个换行符,并将其分配给\ nvariables。
这在线端的插入符号试图逃离下一个字符,但是如果这是一个换行,它将被忽略,并且下一个字符被读取和转义(即使这也是一个换行符)。
然后你需要第三个换行符来结束当前的指令,否则第三行将被附加到LFvariables。
即使batch file的行结束符为CR / LF,只有LF才是重要的,因为CR在parsing器的这个阶段被删除。
使用延迟扩展的好处是,没有特殊的字符处理。
echo Line1%LF%Line2
将会失败,因为parsing器在单个换行符处停止parsing。
更多的解释是
SO:长命令在Vista / DOS批处理(.bat)文件中分成多行
SO:Windows命令解释器(CMD.EXE)如何parsing脚本?
编辑:避免echo.
这不能回答这个问题,因为问题是关于可以输出多行的单个echo
。
但是,尽pipe其他答案谁build议使用echo.
创build一个新的行,应该指出, echo.
是最糟糕的,因为它非常慢,并且可能完全失败,因为cmd.exesearch名为ECHO
的文件并尝试启动它。
为了打印一个空行,你可以使用其中的一个
echo, echo; echo( echo/ echo+ echo=
但使用echo.
, echo\
或echo:
应该避免,因为他们可以真的很慢,取决于脚本将执行的位置,如networking驱动器。
echo.
说够了。
如果你需要在一行中,使用&
。 例如,
echo Line 1 & echo. & echo line 3
会输出为:
Line 1 line 3
现在,说你想要一些更有趣的东西,…
set n=^&echo. echo hello %n% world
输出
hello world
然后,只要你想在echo语句中添加一个新行,就可以抛出%n%
。 这更接近您在各种语言中使用的\n
。
分解
set n=
设置variablesn
等于:
^
排除下一个符号:
&
意味着在同一行上执行另一个命令。 我们不关心errorlevel(它是一个大声喊叫的回声声明),所以不需要&&
。
echo.
继续回声陈述。
所有这些工作,因为你实际上可以创build代码的variables,并在其他命令中使用它们。 这有点像一个贫民窟的function,因为批量并不是最先进的shell脚本语言。 这只适用于批处理variables使用不当,而不是自动指定整数,字符,浮点数,string等。
如果你狡猾,你可以得到这个与其他事情。 例如,使用它来回显选项卡
set t=^&echo. ::there are spaces up to the double colon
当回显某个东西redirect到一个文件时,多个回显命令将不起作用。 我想也许“>>”redirect是一个不错的select:
echo hello> temp 回声世界>>临时
就像Grimtron所build议的那样 – 下面是一个快速定义它的例子:
@echo off set newline=^& echo. echo hello %newline%world
产量
C:\>test.bat hello world
如果你需要把结果放到一个文件中,你可以使用
(echo a & echo. & echo b) > file_containing_multiple_lines.txt
你也可以这样做,
(for %i in (ab "cd") do @echo %~i)
输出将是,
a b cd
请注意,如果将其放入batch file中,则“%”应该加倍。
(for %%i in (ab "cd") do @echo %%~i)
如果有人来这里,因为他们正在寻找从MINGW make makefile回显空行,我用
@cmd /c echo.
简单地使用echo.
导致可怕的process_begin: CreateProcess(NULL, echo., ...) failed.
错误信息。
我希望这有助于至less有一个其他人:)
要批量开始新行,您只需添加“echo [”,如下所示:
echo Hi! echo[ echo Hello!
肯和Jeb解决scheme运作良好。
但是新行仅用LF字符生成,我需要CRLF字符(Windows版本)。
为此,在脚本的末尾,我已经将LF转换为CRLF。
例:
TYPE file.txt | FIND "" /V > file_win.txt del file.txt rename file_win.txt file.txt
你可以使用@echo
(@echo + [space] + [insecable space])
注意:可以用Alt + 0160获得可以放置的空间
希望它有助于:)
嗯,你是对的,我需要它在一个Makefile,它在那里完美的作品。 我想我的答案是不适合batch file…我的坏。
这为我工作,没有延迟的必要的扩展:
@echo off ( echo ^<html^> echo ^<body^> echo Hello echo ^</body^> echo ^</html^> ) pause
它写这样的输出:
<html> <body> Hello </body> </html> Press any key to continue . . .
我不能说比以下更简单:
echo echo hello^&echo world^&pause>silly.bat call silly.bat
我不知道为什么人们不推荐这个,但echo
有一个选项来启用反斜杠转义,这意味着\n
将与echo
工作。
于是
echo -e "Hello\nWorld"
会给出输出
Hello World