一个echo命令中有两个换行符

时间:2011-01-15 16:38:47

标签: batch-file line echo cmd

简单地说,我在Windows XP / Windows 7批处理文件中设置了一个最基本的文本进度指示器,该文件在命令行工具的输出工作之后写入,因为它看起来不像是为了位。我这样做是通过在命令之后管道blurb来实现的:

app.exe -args "file"|echo Writing "file"...

这导致如下所示:

_______________
|app for work |  
|ver:2 10/2009|  
|_____________|  
Writing "file"...

有没有办法在应用程序的输出和输出之间滑动换行符?

我做过的事情都失败了:

|echo.|echo
|echo.|echo.|echo
|echo.&echo.&echo
|echo [alt+255/hex:FF/ÿ/EOL][same again]
|echo -e \r\r (lol)
|echo.. (nope!)

& s可能会推迟到应用程序执行之后,到那时已经太晚了......我错过了什么吗?它甚至可能吗?我知道这不重要,但我很好奇。

4 个答案:

答案 0 :(得分:1)

从您的示例中,我怀疑app.exe实际上将其输出发送到标准错误,而不是标准输出。否则,它的输出将被发送到管道,而echo会吞噬它。

这个怎么样:

app.exe -args "file" | (echo. & echo Writing "file")

答案 1 :(得分:1)

好的,在你的情况下,有很多问题。

通常情况下,您可以使用小技巧回显换行符

setlocal EnableDelayedExpansion
set LF=^


rem Two empty lines are neccessary for the LF creation
rem In the variable <lf> is one line feed character
echo Line1!lf!Line2
------ OUTPUT -----
Line1
Line2

但在你的情况下,这不起作用,因为管道打破了延迟扩展。

但是管道会产生更多问题,因为它会启动两个异步任务。

实际上,您的 app.exe 作为task1运行, echo写入文件作为task2运行。 因此可能会发生task2将在task1之前执行,输出将是

app.exe -args "file" | (echo. & echo Writing "file")

Writing "file"...
_______________
|app for work |
|ver:2 10/2009|
|_____________|

而不是

_______________
|app for work |
|ver:2 10/2009|
|_____________|

Writing "file"...

您可以测试它(在cmdline上)

echo one >&2 | echo two

在大多数情况下,输出是:

one
two

但并不总是!

答案 2 :(得分:0)

你可能想要group你的两个echo命令:

app.exe -args "file" & ( echo ""; echo Writing "file" )

答案 3 :(得分:0)

怎么样?
echo -e "`app.exe -args \"file\"` \n Writing file"