1

Тема: CMD/BAT: есть ли способ вывести через echo пустую строку?

То есть,  сделать то, что в PHP делает
echo "\n";

2

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

echo.

3 (изменено: Rumata, 2011-04-15 17:58:45)

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Стандартно делается так:


echo.

Вместо точки можно использовать еще несколько пунктуационных символов.

upd: alexii ответил раньше. Я и не заметил.

( 2 * b ) || ! ( 2 * b )

4

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Rumata, ничего страшного. Для продолжения дискуссии — какие пунктуационные символы могут быть использованы?

5

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

echo .  выводит точку, а не пустую строку. Я так и делаю разделители, выводя серию точек, дефисов, etc.
Придумал (давно уже) один ректальный способ:

copy log.txt /a + empty_line.txt /a log.txt

Файл empty_line.txt состоит из двух байт и содержит перевод строки.
Слышал о неких escape-последовательностях в DOS, которые вроде бы и предназначены для вывода спецсимволов, вроде табуляции, возврата каретки или перевода строки. Кто-нибудь в курсе этого дела?

6

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

027, тэг «code» используется как раз для того, чтобы не было таких казусов. Между «echo» и «.» нет пробела, как у Вас. Выделите код, скопируйте и вставьте в Ваш пакетный файл как есть.

7 (изменено: Rumata, 2011-04-15 18:30:33)

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

+ = 
( [ ] 
\ / 
. , : ;

Опять эта странная несимметричность круглых скобок. Уже не помню где, но она мне встречалась.

( 2 * b ) || ! ( 2 * b )

8

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Rumata, спасибо, ясно.

9

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

alexii пишет:

Между «echo» и «.» нет пробела, как у Вас. Выделите код, скопируйте и вставьте в Ваш пакетный файл как есть.

Вах! Работает! Вот спасибо!

alexii пишет:

027, тэг «code» используется как раз для того, чтобы не было таких казусов.

Да, понятно, про BBCode я в курсе... Но в данном случае, как мне кажется, лучше было бы явно указать на отсутствие пробела. Что получилось - я автоматом набрал в консоли пробел между командой и аргументом, зная по опыту, что он обязателен. Ну, простите меня, никак не ожидал такого выверта от изобретателей велосипеда^W дос-шелла.

10

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Я как раз указал на то, что если что-то не работает в «ручном» режиме — нужно сначала скопировать код как есть в буфер обмена и попробовать ещё раз.

Оттого-то я и требую постоянно от участников форума: «оформляйте код тэгом «code», оформляйте код тэгом «code»!», ибо данная, казалось бы, мелочь на самом деле весьма важна, когда нужно добиться чёткой повторяемости результатов.

11

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Вы правы, но мы ж все такие умные... Вот прямо так взял и стал копипастить пяток символов.
Я имею в виду нас, мимолетных посетителей.
Тут сработало даже не то, что машинально ввел пробел. Я, собственно, его и не вводил. Я сразу вспомнил костыль собственного производства - "Ах, это я знаю..."
Рефлекс.
Извините за офф. Пост можно удалить, если что.

12

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

027 пишет:

Вот прямо так взял и стал копипастить пяток символов.

Это просто сила привычки. Тут одним символом ошибся при наборе (то есть, даже не сознательно, например, добавил пробел, а просто по инерции) — результат может быть отличным от ожидаемого.

Так что, срочно привыкайте делать «copy-paste».

13

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Не-не-не! Бездумная копипаста иногда приводит к неочевидным ошибкам. Палка тут о двух концах.
Копипасьте вдумчиво!

14 (изменено: wisgest, 2013-09-14 03:49:32)

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Стандартно делается так:


echo.

Да, так советуется в официальной справке.
Но это плоховатый совет.

Rumata пишет:

Вместо точки можно использовать еще несколько пунктуационных символов.

+ = 
( [ ] 
\ / 
. , : ;

Кроме точки мне также нежелательными представляются после ECHO знаки:

\ , ; = /

Остальные, вроде бы, беспроблемны. Наиболее эстетичным и надёжным мне кажется двоеточие.

echo on
setlocal enabledelayedexpansion

type nul>echo
echo.
echo. Hеllo world
ren echo echo.hello
echo.Hello world
ren echo.hello echo.txt
set str=txt - расширение текстовых файлов
echo.%str%
ren echo.txt echo.exe
set str=exe - расширение исполняемых файлов
echo.!str!
del echo.exe

md echo
type nul>echo\hello
echo\Hello world
ren echo\hello file.txt
echo\file.txt - текстовый файл
rd /s /q echo

set str= /?qwerty
echo,!str!
echo;!str!
echo=!str!
set str=?qwerty
echo/!str!

pause

15

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

more<nul
Я конечно далек от мысли... (с)

16

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

smaharbA пишет:
more<nul

Ну да, переводит строку, но зачем использовать внешнюю команду, если существует предназначенная для этих целей встроенная? Во-вторых, это не поможет для случая

echo %s%

17

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

задачу решает ?

Я конечно далек от мысли... (с)

18 (изменено: wisgest, 2013-09-26 12:29:52)

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

smaharbA пишет:

задачу решает ?

Зачем задавать вопрос после того, как ответ уже дан:

wisgest пишет:

Ну да, переводит строку

Но понятно, что не все решения одинаково хороши и

echo:

лучше чем

more<nul

по крайней мере до тех пор, пока не будет показано, что и среди оставшихся символов нет полностью безопасных.
(Замечу, что для частной задачи вывода пустой строки безопасны все символы кроме официально предлагаемой точки! В случае более общей задачи наиболее тяжёлые последствия способны вызвать, опять же, точка (!) и «\».)

wisgest пишет:

Во-вторых, это не поможет для случая

echo %s%

Тут я не прав: сообщение можно вывести с помощью SET/P<NUL, а затем перевести строку предложенным способом. Но надеюсь, что необходимости в таком решении не возникнет.

19

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

smaharbA пишет:
more<nul

Благодарю, то что нужно (пустая строка без пробела).
echo. или echo: выводит  пробел+перевод строки.

20

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

echo. или echo: выводит  пробел+перевод строки.

Уберите пробел после точки или двоеточия в пакетном файле.

21 (изменено: nik, 2013-09-27 12:55:00)

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

alexii, благодарю, помогло.

22

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

wisgest, в чем может быть проблема с точкой? Можно на примере?

23

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Пример дан в сообщении #14.
Если в текущем каталоге есть файл с именем «echo», то будет выведена не пустая строка, а сообщение

"echo." не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Уже одно это может привести к непредсказуемым последствиям (ракеты полетят не в ту сторону), если вывод командного файла не читается человеком, а обрабатывается другой программой.
Если ECHO с точкой испозуется для вывода непустой строки, то последствия могут быть нежелательными с ещё большей вероятностью:

copy %comspec% echo.unknown
echo.Unknown

Файлы с такими именами могут быть созданы не преднамерено, а в результате ошибки в этом или другом командном файле (забыли экранировать или экранировали не тот символ при перенаправлении вывода и т.п.).

24

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

wisgest пишет:

Уже одно это может привести к непредсказуемым последствиям (ракеты полетят не в ту сторону), если вывод командного файла не читается человеком, а обрабатывается другой программой.

Ясно. Так вот почему Булава никак летать не хочет, надо было ПО не на батниках писать...

25

Re: CMD/BAT: есть ли способ вывести через echo пустую строку?

Файлы с такими именами могут быть созданы не преднамерено,

Бывает, и преднамеренно:

C:\Program Files\GnuWin32\bin\echo.exe

. Меня особенно «date.exe» и «dir.exe» «доставали».