开发者

Two newlines in one echo command

开发者 https://www.devze.com 2023-02-04 17:18 出处:网络
Simply put, I\'ve set a most basic text progress indicator in a Windows XP/Windows 7 batch file that writes just after a command line tool\'s output while it works, because it doesn\'t look like it do

Simply put, I've set a most basic text progress indicator in a Windows XP/Windows 7 batch file that writes just after a command line tool's output while it works, because it doesn't look like it does anything for a bit. I do so by piping the blurb after the command as such:

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

This results in something like the following:

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

Is there a way to slip a newline in between the application'开发者_运维技巧s output and my output?

Things I've done and failed:

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

The &'s are probably delayed until after the application does its thing, and by then it's too late... Have I missed something? Is it even possible? I know this is not truly important, but I'm very curious.


From your example, I suspect that app.exe actually sends its output to standard error, rather than standard output. Otherwise its output would have been sent to the pipe and echo would have gobbled it up.

How about this:

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


Ok, in your case, there are multiple problems.

Normally you can echo a line feed with a small trick

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

But in your case this doesn't work, because the pipe breaks the delayed expansion.

But the pipe will make more problems, as it starts two asynchronous tasks.

In reallity your app.exe runs as task1 and echo Writing file runs as task2. So it can happen that task2 will be executed before task1, the output would be

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

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

instead of

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

Writing "file"...

You can test it (on the cmdline)

echo one >&2 | echo two

In the most cases the output is:

one
two

But not always!


you might want to group your two echo commands:

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


What about

echo -e "`app.exe -args \"file\"` \n Writing file"
0

精彩评论

暂无评论...
验证码 换一张
取 消