Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] echo без пустой строки

Ответить
Настройки темы
CMD/BAT - [решено] echo без пустой строки

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!

при попытке передать информацию в файл (echo text >> file.txt) подставляется пустая последняя строка. Есть ли возможность удалить ту самую последнюю (пустую) строку ?

Отправлено: 06:52, 24-01-2019

 

Аватара для YuS_2

Старожил


Сообщения: 298
Благодарности: 111

Профиль | Отправить PM | Цитировать


Цитата letti:
Есть ли возможность удалить ту самую последнюю (пустую) строку ? »
Та самая строка формируется конечным символом перевода строки командой echo
Не знаю, зачем понадобилось убирать эту строку, т.к. при добавлении текста в этот файл командой >> (после удаления пустой строки, то бишь символа перевода строки), этот текст "склеится" с последней строкой... но, в принципе так:
Код: Выделить весь код
<nul set /p  =текст>>out.txt

-------
scio me nihil scire

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:37, 24-01-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 24018
Благодарности: 6975

Профиль | Отправить PM | Цитировать


Цитата letti:
Есть ли возможность удалить ту самую последнюю (пустую) строку ? »
Удалить — нет. Не добавлять символы перевода строки и возврата каретки (0x0D, 0x0A) — да.

Токмо лучше наоборот — на всякий случай:
Код: Выделить весь код
>>"out.txt" <nul set /p sVar=текст
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:16, 24-01-2019 | #3


Ветеран


Сообщения: 795
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата Iska:
на всякий случай: »
если от такого: (<nul set /p=TEXT 1>>out.txt), да, (>>out.txt <nul set /p=TEXT 1) спасет
если от такого: (<nul set /p=TEXT |>>out.txt), хоть где не пиши запись в файл, спасет только:
Код: Выделить весь код
>>out.txt <nul set /p="TEXT |"
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:17, 24-01-2019 | #4


Ветеран


Contributor


Сообщения: 24018
Благодарности: 6975

Профиль | Отправить PM | Цитировать


alpap, от первого. Особенно неприятно, когда номером потока оказывается часть содержимого переменной окружения или переменной цикла разбора: зараз и не обратишь внимания, что куда пропало.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:51, 24-01-2019 | #5


Аватара для YuS_2

Старожил


Сообщения: 298
Благодарности: 111

Профиль | Отправить PM | Цитировать


Да, естественно, всё верно. Если требуется соломки подстелить, то лучше сначала продумать, какие возможные символы на вход могут подаваться, а потом уже код составлять в соответствии с этим думками

Ну а если, вдруг, понадобится, что-то уж слишком снабженное разными хитрыми знаками, то можно и такой вот зубодробительный код соорудить:
почти однострок:
Код: Выделить весь код
@echo off&set "x=|"&set var=^^!*"'||&*)"%%=^|", ;<>
cmd/v/c echo.^&set x=!x:^^^^=^^^^^^^^!^&for /f usebackq^^ tokens^^=1-4^^ delims^^=^^^%x%^^ eol^^= %%i in ('!var:^^^%x%^^=?^^^%x%!') do @set i=%%i^&set j=%%j^&set k=%%k^&echo. [!i:~^^,-1!] ^&echo. [!j:~^^,-1!]^&echo. [!k:~^^,-1!] ^&echo. [%%l]^&echo.^&echo.!i:~^^,-1!!x!!j:~^^,-1!!x!!k:~^^,-1!!x!%%l^&echo.^&exit /b
и пользоваться даже злобными спецсимволами...

-------
scio me nihil scire

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:41, 24-01-2019 | #6


Ветеран


Contributor


Сообщения: 1522
Благодарности: 893

Профиль | Отправить PM | Цитировать


Цитата Iska:
Удалить — нет. Не добавлять символы перевода строки и возврата каретки (0x0D, 0x0A) — да. »
При этом при выводе заранее узнать, какая строка последняя часто очень проблематично, зато узнать, первая ли это строка в файле (по отсутствию этого самого файла или при пересоздании этого файла при выводе первой строки) - нет проблем. Поэтому, чтобы текст не "склеивался":
Код: Выделить весь код
>"out.txt" (<nul set /p sVar=текст1)
>>"out.txt" (Echo.&<nul set /p sVar=текст2)
>>"out.txt" (Echo.&<nul set /p sVar=текст3)
и так далее

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 24-01-2019 в 20:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:08, 24-01-2019 | #7


Ветеран


Сообщения: 795
Благодарности: 279

Профиль | Отправить PM | Цитировать


megaloman,
собственно изменять(ить) можно только последнюю строку вывода (вернее записи)
Код: Выделить весь код
@echo off
>>"out.txt" (
 echo текст1
 echo текст2
 echo:& <nul set /p="текст3"
)
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 24-01-2019 | #8


Ветеран


Contributor


Сообщения: 1522
Благодарности: 893

Профиль | Отправить PM | Цитировать


alpap,
Цитата alpap:
изменять(ить) можно только последнюю строку вывода »
Фишка моего предложения
Цитата megaloman:
заранее узнать,какая строка последняя часто очень проблематично, зато узнать, первая ли это строка в файле - нет проблем. »
Проще обработать особым образом первую строку, зато последующие можно не думая выдавать единообразным образом ни о чем не думая.
То есть в первой строке записываем текст без Cr Lf на конце, а последующие строки пишем как Cr+Lf+Текст

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:55, 24-01-2019 | #9


Ветеран


Сообщения: 795
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Фишка моего предложения »
фишку понял и предложу вариант с почти одинаковым написанием строк, разница лишь в нумерации, несложно добавить в поток, а может изначально будет или будет не лишней для кого-то по задаче:
Код: Выделить весь код
@echo off
set "$_1=текст1"
set "$_2=текст2"
set "$_3=текст3"

>"out.txt" (for /f "tokens=2* delims=_=" %%a in ('set $_') do @(
  if %%a==1 (
   <nul set /p="%%b"
  ) else (
   echo:& <nul set /p="%%b"
  )
 )
)
pause

Отправлено: 03:27, 25-01-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] echo без пустой строки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Поиск строки по части названия и вывод данных в ECHO Kainos Скриптовые языки администрирования Windows 14 16-04-2015 22:21
PowerShell - [решено] Удаление пустой строки в файле monolit Скриптовые языки администрирования Windows 4 17-08-2013 13:57
CMD/BAT - Пустой абзац после определённой строки Bruce Wayne Скриптовые языки администрирования Windows 2 05-05-2012 13:06
Разное - как извлечь строки без html user171078 Программирование и базы данных 0 21-01-2010 23:29
CMD/BAT - определение пустой строки akrav Скриптовые языки администрирования Windows 0 17-06-2008 18:15




 
Переход