Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - Как добавить текст в середину текстрового файла

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


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

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


Есть текстовый файл 1.txt:

__________________________
aaa

[paste]

ccc
__________________________

К примеру [paste] нужно заменить на bbb, при этом пустые строки должны остаться (FOR /F не помог)

Отправлено: 09:54, 04-01-2010

 

Googler


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

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


CMD/BAT - [решено] Замена строк конфига

Отправлено: 11:17, 09-01-2010 | #11



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

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


Аватара для BigBoo

Старожил


Автор проектов


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

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


Похожий вопрос, но задача несколько иная. К примеру, как в шапке, 1.txt:
Код: Выделить весь код
...
aaa=1

[paste]
bbb=1
ccc=1
...
Задача: Нужен скрипт, изменяющий в секции [paste] значение ccc=1 на ccc=0, если параметра ccc не существует, добавить ccc=0 именно в эту секцию.

Отправлено: 11:25, 14-04-2011 | #12


Googler


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

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


Цитата BigBoo:
скрипт, изменяющий в секции [paste] значение ccc=1 на ccc=0, если параметра ccc не существует, добавить ccc=0 именно в эту секцию »
Код: Выделить весь код
@echo off

CALL:INISET 1.ini paste ccc 0
EXIT

:INISET  %file_path% %section% %parm% %val%
::-----------------------------------------
SETLOCAL DisableDelayedExpansion
set $sn= & set $vf=0& set "$ft=%TEMP%\%RANDOM%%RANDOM%.tmp"
(for /f "tokens=1,2* delims==:" %%a in ('findstr /n "$" "%~1"') do (
 set "$b=%%b"& set "$c=%%c"
 SETLOCAL EnableDelayedExpansion
 if "!$b:~0,1!"=="[" set "$sn=!$b:~1,-1!"
 set $lf=_& if /i "!$sn!"=="%~2" if /i "!$b!"=="%~3" set "$lf="
 if defined $c set "$c==!$c!"
 if defined $lf echo/!$b!!$c!
 if "!$sn!"=="%~2" if "!$vf!"=="0" set $vf=1& echo %~3=%~4
 for /f "tokens=1,2 delims=:" %%i in ("!$sn!:!$vf!") do (
ENDLOCAL& set "$sn=%%i"& set "$vf=%%j")))>"%$ft%"
copy /y "%$ft%" "%~1">nul&& del "%$ft%"
::----------------
ENDLOCAL& GoTo:EOF

Последний раз редактировалось amel27, 19-04-2011 в 06:21. Причина: ошибка

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

Отправлено: 14:29, 14-04-2011 | #13


Аватара для BigBoo

Старожил


Автор проектов


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

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


Попробовал Ваш скрипт, что-то не так. Он просто удаляет параметр "ссс" и ничего более не делает.

Отправлено: 22:47, 18-04-2011 | #14


Ветеран


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

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


Код: Выделить весь код
gsar "-s[paste]" "-rbbb" -o 1.txt

Отправлено: 23:08, 18-04-2011 | #15


Googler


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

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


Цитата BigBoo:
Он просто удаляет параметр "ссс" и ничего более не делает »
исправил, была ошибка в случае если файл начинался не с имени секции
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:24, 19-04-2011 | #16


Аватара для BigBoo

Старожил


Автор проектов


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

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


amel27, всё работает, но в моём случае значение параметра содержит символы, в результате скрипт не срабатывает, то есть к примеру так:
Код: Выделить весь код
CALL:INISET 1.ini paste ccc ""a 1","b 2","c 3""
Убираю внутренние кавычки - работает, но хотелось, чтоб они обрабатывались, а также возможна ли обработка символа | ?

Отправлено: 19:01, 19-04-2011 | #17


Googler


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

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


Цитата BigBoo:
значение параметра содержит символы »
придется передавать не по значению, а по ссылке на переменную, содержащую это значение:
Код: Выделить весь код
@echo off

set "$val="a 1","b 2"|"c 3""
CALL:INISET 1.ini paste ccc $val
EXIT

:INISET  file_path section parm ByRef val
::---------------------------------------
SETLOCAL DisableDelayedExpansion
set $sn= & set $vf=0& set "$ft=%TEMP%\%RANDOM%%RANDOM%.tmp"
(for /f "tokens=1,2* delims==:" %%a in ('findstr /n "$" "%~1"') do (
 set "$b=%%b"& set "$c=%%c"
 SETLOCAL EnableDelayedExpansion
 if "!$b:~0,1!"=="[" set "$sn=!$b:~1,-1!"
 set $lf=_& if /i "!$sn!"=="%~2" if /i "!$b!"=="%~3" set "$lf="
 if defined $c set "$c==!$c!"
 if defined $lf echo/!$b!!$c!
 if defined %~4 (set $4=!%~4!) else set "$4=%~4"
 if "!$sn!"=="%~2" if "!$vf!"=="0" set $vf=1& echo %~3=!$4!
 for /f "tokens=1,2 delims=:" %%i in ("!$sn!:!$vf!") do (
ENDLOCAL& set "$sn=%%i"& set "$vf=%%j")))>"%$ft%"
copy /y "%$ft%" "%~1">nul&& del "%$ft%"
::----------------
ENDLOCAL& GoTo:EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:16, 20-04-2011 | #18


Аватара для BigBoo

Старожил


Автор проектов


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

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


amel27, Всё бы хорошо, но вот так работает:
Код: Выделить весь код
set "$val="a 1","b 2"|"c 3""
А вот так - нет:
Код: Выделить весь код
set "$val="a 1","b 2""|c 3""

Отправлено: 12:15, 20-04-2011 | #19


Googler


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

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


Цитата BigBoo:
А вот так - нет:
Код:
set "$val="a 1","b 2""|c 3"" »
для такой строки можно использовать код (намеренно заменил "," на "|"):
Код: Выделить весь код
set $val="a 1"^|"b 2""|c 3"
Из этого примера видно, что спецсиволы вне кавычек нужно экранировать символом "^". Если мы теперь возьмём всю команду SET в кавычки, то произойдёт инверсия: всё что было в кавычках окажется за ними и наоборот, это нужно учесть при экранировании спецсимволов:
Код: Выделить весь код
set "$val="a 1"|"b 2""^|c 3""
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:41, 20-04-2011 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
ALTLinux - Как наложить на JPG текст (дата создания файла) user51 Общий по Linux 6 30-06-2008 15:37
[решено] как добавить путь к текущей директории в reg файл из bat файла ? mitiya Автоматическая установка приложений 7 27-03-2008 16:12
Как искать в поисковиках, еисли я не помню середину слова taras.v Хочу все знать 5 12-03-2008 06:41
Разное - [решено] Как в список "Символы" добавить собственные символы для вставки в текст T-IIIJ Microsoft Windows 2000/XP 4 23-02-2008 16:27
Как добавить текст в свое сообщение? Vadikan О сайте и форуме 4 17-10-2002 07:55




 
Переход