Две строки в одной команде эха - PullRequest
1 голос
/ 15 января 2011

Проще говоря, я установил самый простой текстовый индикатор хода выполнения в пакетном файле Windows XP / Windows 7, который записывает сразу после вывода инструмента командной строки, пока он работает, потому что он не выглядит так, будто ничего не делает длянемного.Я делаю это, отправляя объявление после команды следующим образом:

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!)

Вероятно, & & задерживаются до тех пор, пока приложение не выполнит свою работу, и к тому времени будет слишком поздно ..Я что-то пропустил?Это вообще возможно?Я знаю, что это не очень важно, но мне очень любопытно.

Ответы [ 4 ]

1 голос
/ 16 января 2011

Хорошо, в вашем случае есть несколько проблем.

Обычно вы можете повторить перевод строки с помощью небольшого трюка

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 работает как задача 1, а echo Запись файла выполняется как задача 2. Таким образом, может случиться так, что задача 2 будет выполнена до задачи 1, результат будет

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"...

Вы можете проверить это (в командной строке)

echo one >&2 | echo two

В большинстве случаев вывод:

one
two

Но не всегда!

1 голос
/ 15 января 2011

Из вашего примера я подозреваю, что app.exe на самом деле отправляет свой вывод со стандартной ошибкой, а не со стандартным выводом. В противном случае его вывод был бы отправлен в канал, и echo поглотил бы его.

Как насчет этого:

app.exe -args "file" | (echo. & echo Writing "file")
0 голосов
/ 15 января 2011

А как же

echo -e "`app.exe -args \"file\"` \n Writing file"
0 голосов
/ 15 января 2011

вы можете сгруппировать две ваши команды эха:

app.exe -args "file" & ( echo ""; echo Writing "file" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...