Bri*_*ndy 605 windows newline batch-file
你怎么能从批处理文件输出中插入换行符?
我想做的事情如下:
echo hello\nworld
Run Code Online (Sandbox Code Playgroud)
哪个会输出:
hello
world
Run Code Online (Sandbox Code Playgroud)
Mat*_*cey 531
使用:
echo hello
echo.
echo world
Run Code Online (Sandbox Code Playgroud)
Gri*_*ron 440
echo hello & echo.world
这意味着您可以将& echo.换行定义为常量\n.
小智 135
在这里,创建一个.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
Run Code Online (Sandbox Code Playgroud)
您应该看到如下输出:
There should be a newline
inserted here.
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
显然,您只需要REM语句之间的代码.
mac*_*pas 94
echo:cmd/bat-files中有一个标准功能来写空行,它在cmd输出中模拟一个新行:
@echo off
@echo line1
@echo:
@echo line2
Run Code Online (Sandbox Code Playgroud)
上面引用的cmd文件的输出:
line1
line2
Run Code Online (Sandbox Code Playgroud)
jeb*_*jeb 61
喜欢Ken的答案,但是使用了延迟扩展.
setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)
echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"
Run Code Online (Sandbox Code Playgroud)
首先创建一个换行符并将其分配给\n变量.
这可以作为行末端的插入符号尝试转义下一个字符,但如果这是一个换行符,它将被忽略,下一个字符被读取并转义(即使这也是一个换行符).
然后你需要第三个换行来结束当前指令,否则第三行将被附加到LF变量.
即使批处理文件具有CR/LF行结尾,只有LF很重要,因为CR在解析器的这个阶段被删除了.
使用延迟扩展的优点是,根本没有特殊的字符处理.
echo Line1%LF%Line2因为解析器停止在单个换行符处解析,所以会失败.
更多解释是在
SO:长命令在Vista/DOS批处理(.bat)文件中拆分多行
SO:Windows命令解释器(CMD.EXE)如何解析脚本?
编辑:避免 echo.
这没有回答这个问题,因为问题是关于echo可以输出多行的单一问题.
但是,尽管其他答案建议使用echo.创建一个新行,但应该注意这echo.是最糟糕的,因为它非常慢并且可以完全失败,因为cmd.exe会搜索一个名为的文件ECHO并尝试启动它.
要打印一个空行,您可以使用其中一个
echo,
echo;
echo(
echo/
echo+
echo=
Run Code Online (Sandbox Code Playgroud)
但是使用的echo.,echo\或echo:应该避免,因为他们可以很慢,这取决于该脚本将被执行,就像一个网络驱动器的位置.
col*_*non 37
echo. 说够了.
如果您需要一行,请使用&.例如,
echo Line 1 & echo. & echo line 3
Run Code Online (Sandbox Code Playgroud)
将输出为:
Line 1
line 3
Run Code Online (Sandbox Code Playgroud)
现在,假设你想要更有趣的东西,......
set n=^&echo.
echo hello %n% world
Run Code Online (Sandbox Code Playgroud)
输出
hello
world
Run Code Online (Sandbox Code Playgroud)
然后只需在%n%echo语句中想要一个新行时抛出一个.这更接近您\n在各种语言中使用.
分解
set n=将变量设置n为:
^ 取消下一个符号:
&意味着在同一行上执行另一个命令.我们不关心errorlevel(它是一个大声喊叫的echo语句),所以&&不需要.
echo. 继续回声.
所有这一切都有效,因为您实际上可以创建代码变量,并在其他命令中使用它们.它有点像贫民窟功能,因为批处理并不是最先进的shell脚本语言.这只能是因为批次的变量不佳使用,而不是整数,字符,浮点数,字符串之间指定等自然.
如果你很狡猾,你可以让它与其他东西一起工作.例如,使用它来回显选项卡
set t=^&echo. ::there are spaces up to the double colon
Run Code Online (Sandbox Code Playgroud)
Cre*_*ing 19
当回显某些内容以重定向到文件时,多个echo命令将不起作用.我想也许">>"重定向器是一个不错的选择:
echo hello > temp echo world >> temp
小智 15
就像Grimtron建议的那样 - 这里有一个快速的例子来定义它:
@echo off
set newline=^& echo.
echo hello %newline%world
Run Code Online (Sandbox Code Playgroud)
C:\>test.bat
hello
world
Run Code Online (Sandbox Code Playgroud)
tes*_*t30 14
如果需要将结果放到文件中,可以使用
(echo a & echo. & echo b) > file_containing_multiple_lines.txt
Run Code Online (Sandbox Code Playgroud)
你也可以这样做,
(for %i in (a b "c d") do @echo %~i)
Run Code Online (Sandbox Code Playgroud)
输出将是,
a
b
c d
Run Code Online (Sandbox Code Playgroud)
请注意,当将其放入批处理文件中时,'%'应加倍.
(for %%i in (a b "c d") do @echo %%~i)
Run Code Online (Sandbox Code Playgroud)
如果有人来这里因为他们想要从MINGW make makefile回显一个空白行,我就用了
@cmd /c echo.
简单地使用echo.导致可怕的process_begin: CreateProcess(NULL, echo., ...) failed.错误消息.
我希望这有助于至少有一个人在那里:)
对于echo换行符,.在 后面添加一个点echo:
echo.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
926138 次 |
| 最近记录: |