简单地说,我在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可能会推迟到应用程序执行之后,到那时已经太晚了......我错过了什么吗?它甚至可能吗?我知道这不重要,但我很好奇。
答案 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"