Тема: CMD/BAT: есть ли способ вывести через echo пустую строку?
То есть, сделать то, что в PHP делает
echo "\n";
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
То есть, сделать то, что в PHP делает
echo "\n";
echo.
Стандартно делается так:
echo.
Вместо точки можно использовать еще несколько пунктуационных символов.
upd: alexii ответил раньше. Я и не заметил.
Rumata, ничего страшного. Для продолжения дискуссии — какие пунктуационные символы могут быть использованы?
echo . выводит точку, а не пустую строку. Я так и делаю разделители, выводя серию точек, дефисов, etc.
Придумал (давно уже) один ректальный способ:
copy log.txt /a + empty_line.txt /a log.txt
Файл empty_line.txt состоит из двух байт и содержит перевод строки.
Слышал о неких escape-последовательностях в DOS, которые вроде бы и предназначены для вывода спецсимволов, вроде табуляции, возврата каретки или перевода строки. Кто-нибудь в курсе этого дела?
027, тэг «code» используется как раз для того, чтобы не было таких казусов. Между «echo» и «.» нет пробела, как у Вас. Выделите код, скопируйте и вставьте в Ваш пакетный файл как есть.
+ =
( [ ]
\ /
. , : ;
Опять эта странная несимметричность круглых скобок. Уже не помню где, но она мне встречалась.
Rumata, спасибо, ясно.
Между «echo» и «.» нет пробела, как у Вас. Выделите код, скопируйте и вставьте в Ваш пакетный файл как есть.
Вах! Работает! Вот спасибо!
027, тэг «code» используется как раз для того, чтобы не было таких казусов.
Да, понятно, про BBCode я в курсе... Но в данном случае, как мне кажется, лучше было бы явно указать на отсутствие пробела. Что получилось - я автоматом набрал в консоли пробел между командой и аргументом, зная по опыту, что он обязателен. Ну, простите меня, никак не ожидал такого выверта от изобретателей велосипеда^W дос-шелла.
Я как раз указал на то, что если что-то не работает в «ручном» режиме — нужно сначала скопировать код как есть в буфер обмена и попробовать ещё раз.
Оттого-то я и требую постоянно от участников форума: «оформляйте код тэгом «code», оформляйте код тэгом «code»!», ибо данная, казалось бы, мелочь на самом деле весьма важна, когда нужно добиться чёткой повторяемости результатов.
Вы правы, но мы ж все такие умные... Вот прямо так взял и стал копипастить пяток символов.
Я имею в виду нас, мимолетных посетителей.
Тут сработало даже не то, что машинально ввел пробел. Я, собственно, его и не вводил. Я сразу вспомнил костыль собственного производства - "Ах, это я знаю..."
Рефлекс.
Извините за офф. Пост можно удалить, если что.
Вот прямо так взял и стал копипастить пяток символов.
Это просто сила привычки. Тут одним символом ошибся при наборе (то есть, даже не сознательно, например, добавил пробел, а просто по инерции) — результат может быть отличным от ожидаемого.
Так что, срочно привыкайте делать «copy-paste».
Не-не-не! Бездумная копипаста иногда приводит к неочевидным ошибкам. Палка тут о двух концах.
Копипасьте вдумчиво!
Стандартно делается так:
echo.
Да, так советуется в официальной справке.
Но это плоховатый совет.
Вместо точки можно использовать еще несколько пунктуационных символов.
+ = ( [ ] \ / . , : ;
Кроме точки мне также нежелательными представляются после 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
more<nul
more<nul
Ну да, переводит строку, но зачем использовать внешнюю команду, если существует предназначенная для этих целей встроенная? Во-вторых, это не поможет для случая
echo %s%
задачу решает ?
задачу решает ?
Зачем задавать вопрос после того, как ответ уже дан:
Ну да, переводит строку
Но понятно, что не все решения одинаково хороши и
echo:
лучше чем
more<nul
по крайней мере до тех пор, пока не будет показано, что и среди оставшихся символов нет полностью безопасных.
(Замечу, что для частной задачи вывода пустой строки безопасны все символы кроме официально предлагаемой точки! В случае более общей задачи наиболее тяжёлые последствия способны вызвать, опять же, точка (!) и «\».)
Во-вторых, это не поможет для случая
echo %s%
Тут я не прав: сообщение можно вывести с помощью SET/P<NUL, а затем перевести строку предложенным способом. Но надеюсь, что необходимости в таком решении не возникнет.
more<nul
Благодарю, то что нужно (пустая строка без пробела).
echo. или echo: выводит пробел+перевод строки.
echo. или echo: выводит пробел+перевод строки.
Уберите пробел после точки или двоеточия в пакетном файле.
alexii, благодарю, помогло.
wisgest, в чем может быть проблема с точкой? Можно на примере?
Пример дан в сообщении #14.
Если в текущем каталоге есть файл с именем «echo», то будет выведена не пустая строка, а сообщение
"echo." не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Уже одно это может привести к непредсказуемым последствиям (ракеты полетят не в ту сторону), если вывод командного файла не читается человеком, а обрабатывается другой программой.
Если ECHO с точкой испозуется для вывода непустой строки, то последствия могут быть нежелательными с ещё большей вероятностью:
copy %comspec% echo.unknown
echo.Unknown
Файлы с такими именами могут быть созданы не преднамерено, а в результате ошибки в этом или другом командном файле (забыли экранировать или экранировали не тот символ при перенаправлении вывода и т.п.).
Уже одно это может привести к непредсказуемым последствиям (ракеты полетят не в ту сторону), если вывод командного файла не читается человеком, а обрабатывается другой программой.
Ясно. Так вот почему Булава никак летать не хочет, надо было ПО не на батниках писать...
Файлы с такими именами могут быть созданы не преднамерено,
Бывает, и преднамеренно:
C:\Program Files\GnuWin32\bin\echo.exe
. Меня особенно «date.exe» и «dir.exe» «доставали».
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться