![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как добавить текст в середину текстрового файла |
|
|
CMD/BAT - Как добавить текст в середину текстрового файла
|
Новый участник Сообщения: 9 |
Есть текстовый файл 1.txt:
__________________________ aaa [paste] ccc __________________________ К примеру [paste] нужно заменить на bbb, при этом пустые строки должны остаться (FOR /F не помог) |
|
Отправлено: 09:54, 04-01-2010 |
Старожил Сообщения: 474
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:32, 20-04-2011 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата BigBoo:
@echo off set "$par=ccc" set "$val="a 1","b 2","c 3"" CALL:INISET 1.ini paste $par $val 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 defined %~3 (set $3=!%~3!) else set "$3=%~3" if defined %~4 (set $4=!%~4!) else set "$4=%~4" 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 > очень странное имя для параметра... на всякий случай: оно не должно содержать символов ":" и "=" |
|
Отправлено: 16:48, 20-04-2011 | #22 |
Старожил Сообщения: 474
|
Профиль | Отправить PM | Цитировать amel27, спасибо, теперь всё работает как надо.
Цитата amel27:
|
|
Отправлено: 18:02, 20-04-2011 | #23 |
Старожил Сообщения: 474
|
Профиль | Отправить PM | Цитировать Попробовал на реальном standard_menu.ini и обнаружилась новая проблема, связанная с кодировкой. Дело в том, что standard_menu.ini в кодировке UTF-8, и после отработки скрипта вместо русских букв получаем:
Хоть CMD-файл в OEM-866, ANSI-1251 - всё равно, а если для прикола сохранить в UTF-8
![]() ![]() p.s. С кодировкой standard_menu.ini всё в порядке, скрипт её не меняет, если русские буквы не использовать - всё отрабатывает корректно! |
Отправлено: 18:40, 20-04-2011 | #24 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать BigBoo, возможно, Вам стоит перейти на использование WSH, а ещё лучше — PowerShell.
|
Отправлено: 19:03, 20-04-2011 | #25 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата BigBoo:
Цитата BigBoo:
напрямую батник с UTF8 работать не может, так как для Windows "родными" являются OEM/ANSI/UTF-16 кодировки, но можно сделать предварительное преобразование в любую из этих кодировок, а после обработки вернуть в исходную (UTF8), вот пример для исходного файла UTF-8 with BOM: P.S. красным выделен BOM для UTF-8, лучше скопировать его с любого UTF8-текстовика P.P.S. если исходный файл не содержит BOM, код придется изменить |
||
Последний раз редактировалось amel27, 22-04-2011 в 04:45. Причина: оформление Отправлено: 07:05, 21-04-2011 | #26 |
Старожил Сообщения: 474
|
Профиль | Отправить PM | Цитировать Цитата amel27:
И ещё вопрос: cmd-файл со скриптом в Вашем последнем примере сохраняется в OEM-866? |
|
Отправлено: 10:57, 21-04-2011 | #27 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата BigBoo:
Цитата BigBoo:
- открыть полученный UTF8-файл в текстовом редакторе как DOS-текст (блокнот не поддерживает, я использую FAR); - скопировать первые три спецсимвола (BOM) в отмеченное место батника; P.S. Всё это имеет смысл только если обрабатываемые файлы Opera содержат BOM, в противном случае скрипт придется переделывать. |
||
Отправлено: 11:53, 21-04-2011 | #28 |
Старожил Сообщения: 474
|
Профиль | Отправить PM | Цитировать amel27, испробовал Ваш скрипт с учётом "BOM". Скрипт зацикливается на ошибке и далее иероглифы:
Если из INI-файла удалить всё, кроме нужной секции - отрабатывает, вставляя по одному символу в строку столбиком, где русские буквы - всё те же крякозябры.
|
Отправлено: 20:51, 21-04-2011 | #29 |
Ветеран Сообщения: 1759
|
BigBoo,
Мне кажется вы выбрали не тот инструмент, голые батники плохо работают с текстом, тем более в utf8, а если конфиг большой, то есть вероятность, что он его вообще не пропарсит. Если вы хотите твик оперы, то на мой взгляд, было бы проще и надежней просто заменить файл конфига другим, модифицированным. |
Отправлено: 22:42, 21-04-2011 | #30 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|