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

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

Ответить
Настройки темы
CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки

Ветеран


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

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


Изменения
Автор: SharkyEXE
Дата: 02-03-2015
Всем здравствуйте.

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
Благодарности: 8086

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


Уберите:
Цитата SharkyEXE:
при помощи *.bat или *.cmd файла »
и будет Вам счастье.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:06, 02-03-2015 | #2



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

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


Ветеран


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

Профиль | Отправить 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
Благодарности: 86

Профиль | Отправить 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
Благодарности: 575

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


SharkyEXE, здравствуйте.





Цитата SharkyEXE:
Просто лично мне очень хочется универсальности, чтобы Ваш код работал с любой кодировкой файла 2015-03-02.txt.
Или такая универсальность не получится? »



Такую, как Вы описали, универсальность сделать можно. Более того, Вам не придётся ничего "закомментировывать", поскольку пакетный файл будет сам условно определять кодировку текстового файла из перечисленных Вами. Но только не расширяйте Ваш список кодировок.



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
Благодарности: 86

Профиль | Отправить 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
Благодарности: 575

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


Цитата SharkyEXE:
Это:
1) Win 1200 (UTF-16LE)
2) Win 1251 (ANSI - кириллица)
3) Win 866 (OEM - русская)
или как? »

Это!



Цитата SharkyEXE:
И еще: файл *.bat или *.cmd, содержащий этот код, в какой должен быть кодировке? »

Цитата Georgio:
Пакетный файл должен быть в кодировке Win-1251 (ANSI, кириллица)! »
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:42, 02-03-2015 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход