2013-12-19 5 views
77

При выводе сообщений о состоянии на консоль из командного файла Windows я хочу вывести пустые строки, чтобы разбить выход. Как мне это сделать?Эхо пустую (пустую) строку на консоль из командного файла Windows

+5

Я не верю, что вопрос [Как вы можете повторить перевод строки в пакетных файлах?] (http://stackoverflow.com/q/132799/1497596) является дубликатом этого вопроса. Суть этого вопроса заключается в следующем: ** Используя одно выражение 'echo', как я могу выводить две строки текста с новой линией между ними? ** Тем не менее, несколько ответов на этот вопрос также касаются того, как выводить пустые (пустые) строки. – DavidRR

+1

Поскольку этот пост больше не принимает ответы ... Правильный ответ: 'echo:' согласно следующей ссылке. http://ss64.com/nt/echo.html – H2ONaCl

+0

В заключение ссылки ss64, опубликованной для 'echo' ...' echo.', ищет файл с именем 'echo' и создает только пустую строку, если такой файл не существует. Эта характеристика делает «эхо» более медленным и менее надежным, чем «эхо:». – u8it

ответ

41

Примечание: Хотя мой первоначальный ответ привлек несколько upvotes, я решил, что я мог бы сделать гораздо лучше. Вы можете найти мой оригинальный (упрощенный и ошибочный) ответ в истории редактирования.

Если Microsoft имела намерение обеспечения средств вывода пустую строку из cmd.exe, Microsoft, несомненно, был бы документально такую ​​простую операцию. Именно это упущение побудило меня задать этот вопрос.

Таким образом, так как средство для вывода пустой строки из cmd.exe является не документально, возможно, следует рассмотреть любые предложения о том, как добиться, чтобы это было взломать. Это означает, что не существует известного способа вывода пустой строки из cmd.exe, которая гарантирует, чтобы работать (или работать эффективно) в все ситуаций.

Имея это в виду, рассмотрим методы, которые были рекомендованы для вывода пустой строки из cmd.exe. Все рекомендации основаны на изменениях команды echo.


echo. 

В то время как это будет работать во многих, если не в большинстве ситуаций, следует избегать, потому что это медленнее, чем его альтернативы и на самом деле может не (см here, here и here). В частности, cmd.exe сначала ищет файл с именем echo и пытается его запустить. Если файл с именем echo происходит существовать в текущем рабочем каталоге, echo. будет завершаться:

'echo.' is not recognized as an internal or external command, 
operable program or batch file. 

echo: 
echo\ 

В конце this answer, автор утверждает, что эти команды могут быть медленными, например, если они выполняются из местоположения сетевого диска. Конкретная причина потенциальной медленности не указана. Но можно сделать вывод, что он может иметь какое-то отношение к доступу к файловой системе. (Может быть, потому, что : и \ имеют особое значение в пути файловой системы Windows,?)

Однако, некоторые из них могут рассмотреть эти быть безопасными вариантами, так как : и \ не могут появляться в имени файла. По той или иной причине, echo: рекомендуется по SS64.com here.


echo(
echo+ 
echo, 
echo/ 
echo; 
echo= 
echo[ 
echo] 

This lengthy discussion включает в себя то, что я считаю все это. Некоторые из этих вариантов рекомендуются также в this SO answer.В приведенной ниже статье this post заканчивается рекомендацией для echo( и echo:.

Мой вопрос в верхней части этой страницы не указывает версию Windows. Мои эксперименты в Windows 10 показывают, что все из них создают пустую строку, независимо от того, существуют ли в текущем рабочем каталоге файлы с именами echo, echo+, echo,, ..., echo]. (Обратите внимание, что мой вопрос предшествует выпуск ОС Windows 10. Таким образом, я признаю возможность того, что более ранние версии Windows, может вести себя по-разному.)

В this answer, @jeb утверждает, что echo(всегда работы. Для меня ответ @ jeb подразумевает, что другие варианты менее надежны, но не содержат каких-либо подробностей относительно того, почему это может быть. Обратите внимание, что @jeb внесла очень ценный контент в другие ссылки, которые я привел в этом ответе.


Вывод: ли не использование echo.. Из многих других вариантов я столкнулся в источниках я цитируемых, поддержка этих двух появляется наиболее авторитетных:

echo(
echo: 

Но я не нашел каких-либо убедительных доказательств, что использование любого из них всегда будет УСТРАНЕНИЕ свободно.


Пример:

@echo off 
echo Here is the first line. 
echo(
echo There is a blank line above this line. 

Ожидаемые результаты:

Here is the first line. 

There is a blank line above this line. 
34

Существует часто кончик, чтобы использовать 'эхо'.

Но это медленный процесс, и он может выйти из строя с сообщением об ошибке, поскольку cmd.exe будет искать сначала файл с именем 'echo' (без расширения), и только когда файл не существует, он выводит пустую строку ,

Вы можете использовать echo(. Это примерно в 20 раз быстрее, и он работает всегда. Единственным недостатком может быть то, что он выглядит странно.

Подробнее о различных вариантах ECHO:/\ на DOS tips: ECHO. FAILS to give text or blank line.

+3

У вас есть источник, который подчеркивает эту проблему? –

+8

IMHO совершенно бессмысленно беспокоиться о скорости в пакетном режиме - если ваше узкое место производительности находится в пакетном файле, вы не пытаетесь его оптимизировать - вы выбросите его, чтобы переписать его на реальном языке. –

+4

@MatteoItalia, это не связано со скоростью. Если он делает что-то лишнее (поиск сначала для файла с именем 'echo' без расширения), то это неправильно, и если есть файл как таковой, он действительно провалится. Дополнительные баллы, если батчер не удается в выходные дни, когда все вечеринки проходят в полстраны. – Pacerier

94

Любой из перечисленных ниже трех вариантов работы для Вас:

echo[ 

echo(

echo. 

Например:

@echo off 
echo There will be a blank line below 
echo[ 
echo Above line is blank 
echo( 
echo The above line is also blank. 
echo. 
echo The above line is also blank. 
+4

Осторожно, «echo.'» может не работать, см. Комментарии по адресу http://stackoverflow.com/ вопросы/132799/как-кан-ты-эхо-а-символ новой строки в порционных-файлах # comment51325122_3123194 – Pacerier

Смежные вопросы