|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки |
|
CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки
|
Ветеран Сообщения: 900 |
Всем здравствуйте.
1) есть файл 2015-03-02.txt 2) по поводу кодировки файла 2015-03-02.txt: 2-1) запускаем программу AkelPad 2-2) в окно программы AkelPad перетаскиваем файл 2015-03-02.txt 2-3) в строке состояния программы AkelPad пишется: Win 1200 (UTF-16LE) 2-4) в программе AkelPad, делаем Файл -> Сохранить как... 2-5) появляется окно с заголовком Сохранение 2-6) в окне с заголовком Сохранение пишется: Кодировка: 1200 (UTF-16LE) с галочкой BOM Вот скриншот: тынц (выделено красной линией) Задача: нужно в файле 2015-03-02.txt при помощи *.bat или *.cmd файла заменить строки Alt Line Fill=, после знака = может быть что угодно, на Alt Line Fill=0 Было Скрытый текст
{пустая строка} {пустая строка} {пустая строка} {пустая строка} {пустая строка} [TempFile] {пустая строка} DialogType=1 DockAutoload=1 Alt Line Fill=28 SaveRelative=1 Alt Line FillSaveOnExitEnable=1 SaveSessions=1 WindowAlt Line FillRect=52010000270100005C0200008A010000 ModalDialogEnable=0 SaveDataAlt Line Fill=2039 {пустая строка} {пустая строка} [6498] {пустая строка} {пустая строка} {пустая строка} {пустая строка} DialogType=1 DockAutoload=1 Alt Line Fill=28 SaveRelative=1 SaveOnExitEnable=1 SaveSessions=1 WindowRect=52010000270100005C0200008A010000 ModalDialogEnable=0 Alt Line Fill=398 SaveData=2039 {пустая строка} {пустая строка} {пустая строка} Скрытый текст
{пустая строка} {пустая строка} {пустая строка} {пустая строка} {пустая строка} [TempFile] {пустая строка} DialogType=1 DockAutoload=1 Alt Line Fill=0 SaveRelative=1 Alt Line FillSaveOnExitEnable=1 SaveSessions=1 WindowAlt Line FillRect=52010000270100005C0200008A010000 ModalDialogEnable=0 SaveDataAlt Line Fill=2039 {пустая строка} {пустая строка} [6498] {пустая строка} {пустая строка} {пустая строка} {пустая строка} DialogType=1 DockAutoload=1 Alt Line Fill=0 SaveRelative=1 SaveOnExitEnable=1 SaveSessions=1 WindowRect=52010000270100005C0200008A010000 ModalDialogEnable=0 Alt Line Fill=0 SaveData=2039 {пустая строка} {пустая строка} {пустая строка} Строки, которые должны быть заменены - выделены подчеркиванием. Строки, которые не должны быть заменены, хотя в содержимом строк имеется Alt Line Fill - выделены жирным с подчеркиванием. После замены кодировка файла 2015-03-02.txt должна сохраниться (см. пункт 2)) Спасибо. |
|
Отправлено: 00:50, 02-03-2015 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Уберите:
Цитата SharkyEXE:
|
|
Отправлено: 02:06, 02-03-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @echo off& setlocal set "file=2015-03-02.txt" set "label=Alt Line Fill" set "delim==" set "substitute=0" >1.tmp ( type "%file%" echo. ) for /f %%i in ('^<1.tmp find/c /v ""') do<1.tmp>2.tmp ( for /l %%j in (1 1 %%i) do ( set/p "x=" if defined x ( for /f "delims=%delim%" %%k in ('cmd/v/c echo.!x!') do ( if "%%k" equ "%label%" ( cmd/v/c echo.!label!!delim!!substitute! ) else ( cmd/v/c echo.!x! ) ) set "x=" ) else ( echo. ) ) ) >nul chcp 1251 <nul>"%file%" ( set/p=яю cmd/u/c type 2.tmp ) del 1.tmp 2.tmp endlocal& exit/b 0 Пакетный файл должен быть в кодировке Win-1251 (ANSI, кириллица)! |
Последний раз редактировалось Georgio, 02-03-2015 в 04:47. Отправлено: 04:32, 02-03-2015 | #3 |
Ветеран Сообщения: 900
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Не хочу ни кого обидеть, извините меня, пожалуйста, локально для меня счастье - это 100%но рабочий код :-) Georgio Здравствуйте. А нельзя, ли, пожалуйста, Ваш вариант сделать универсальным: 1) если файл 2015-03-02.txt имеет кодировку Win 1251 (ANSI - кириллица), то в Вашем коде комментируются одни строки, раскомментируются другие строки 2) если файл 2015-03-02.txt имеет кодировку Win 866 (OEM - русская), то в Вашем коде комментируются одни строки, раскомментируются другие строки Просто лично мне очень хочется универсальности, чтобы Ваш код работал с любой кодировкой файла 2015-03-02.txt. Или такая универсальность не получится? Так сказать, чтобы для каждой кодировки файла 2015-03-02.txt не писать заново Ваш код Спасибо. |
|
Последний раз редактировалось SharkyEXE, 02-03-2015 в 09:30. Отправлено: 07:33, 02-03-2015 | #4 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать SharkyEXE, здравствуйте.
Цитата SharkyEXE:
Такую, как Вы описали, универсальность сделать можно. Более того, Вам не придётся ничего "закомментировывать", поскольку пакетный файл будет сам условно определять кодировку текстового файла из перечисленных Вами. Но только не расширяйте Ваш список кодировок ![]() SharkyEXE, проверяйте: @echo off& setlocal set "file=2015-03-02.txt" set "label=Alt Line Fill" set "delim==" set "substitute=0" >1.tmp type "%file%" for /f %%i in ('^<1.tmp find/c /v ""') do<1.tmp>2.tmp ( for /l %%j in (1 1 %%i) do ( set/p "x=" if defined x ( for /f "delims=%delim%" %%k in ('cmd/v/c echo.!x!') do ( if "%%k" equ "%label%" ( cmd/v/c echo.!label!!delim!!substitute! ) else ( cmd/v/c echo.!x! ) ) set "x=" ) else ( echo. ) ) ) >nul chcp 1251 >>2.tmp echo. for /f "tokens=1,2 delims=|" %%i in ("%file%|1.tmp") do>"%file%" ( if %%~zi neq %%~zj ( <nul set/p=яю >nul chcp 866 cmd/u/c type 2.tmp ) else ( type 2.tmp ) ) del 1.tmp 2.tmp endlocal& exit/b . |
||
Отправлено: 14:38, 02-03-2015 | #5 |
Ветеран Сообщения: 900
|
Профиль | Отправить PM | Цитировать Georgio
Здравствуйте. Пожалуйста, если у Вас есть время, возможность, желание - при написания Вами этого кода Вы на какие кодировки для файла 2015-03-02.txt ориентировались? Это: 1) Win 1200 (UTF-16LE) 2) Win 1251 (ANSI - кириллица) 3) Win 866 (OEM - русская) или как? И еще: файл *.bat или *.cmd, содержащий этот код, в какой должен быть кодировке? Спасибо. |
Отправлено: 15:10, 02-03-2015 | #6 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата SharkyEXE:
Это! Цитата SharkyEXE:
Цитата Georgio:
|
|||
Отправлено: 15:42, 02-03-2015 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск, удаление, замена и добавление строк в текстового файле. Что возможно? | akrav | Скриптовые языки администрирования Windows | 8 | 06-12-2015 13:22 | |
CMD/BAT - Поиск строк в файле и замена их на числа,сгенерированные по маске. | galclerik | Скриптовые языки администрирования Windows | 17 | 19-12-2013 11:59 | |
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox | ultrarare | Скриптовые языки администрирования Windows | 11 | 03-07-2013 14:37 | |
CMD/BAT - Замена нескольких строк в файле | bcubbs@fb | Скриптовые языки администрирования Windows | 3 | 24-01-2013 14:01 | |
CMD/BAT - Замена строки в txt файле | Сергей_Першин@vk | Скриптовые языки администрирования Windows | 0 | 07-06-2012 14:56 |
|