![]() |
Поиск и замена текста в файле
Здравствуйте.
Прошу помощи. Есть файл с именем 1.txt в нем последняя строчка заканчивается такими символами "текст::== ))" Необходимо символы "== ))" перенести на новую строчку, т.е. вставить перенос строки <CR><LF> Текст в кодировке ANSI. Как это сделать с помощью bat файла? Пробую следующее, не работает: setlocal enabledelayedexpansion Set "infile=D:\1.txt" Set "find="== ))"" Set "replace=\n"== ))"" @echo off setlocal enabledelayedexpansion set COUNT=0 for /F "tokens=* delims=," %%n in (!infile!) do ( set LINE=%%n set TMPR=!LINE:%find%=%replace%! Echo !TMPR!>>1.txt ) move 1.txt %infile%le% |
Код:
@echo off |
Опробовал код. Что-то не совсем так.
Переход на новую строку произошел, но вместо символов "== ))" стоит 0 |
вот, надергал куски из сети ))
Код:
@echo off |
Дмитрий_Кульгейко@vk,
А не подскажете, почему у меня все работает? Даже кодировку такую поставил, хоть тут она роли и не играет (читабельность - не в счет): Файл 138004 |
Подозреваю что в файле далеко не "текст::== ))", выложите файл сюда, посмотрим.
|
Вложений: 1
Изначально файл такой как во вложении. Числа в имени файла меняются.
|
To: alpap
Если убираю все кроме последней строки, ваш код работает. To: NickM Ваш код тоже работает если у файла постоянное имя. |
Дмитрий_Кульгейко@vk,
Мало того что в строках еще есть :, откуда мне знать, а он у меня в разделителях, так еще вы приводите строку "текст::== ))", а на самом деле "текст::==))": Код:
@echo off |
Код:
@Echo Off Код:
==)) |
To: alpap
Действительно моя ошибка. Теперь работает. Но как теперь применить данный код ко всем подобным файлам т.е. файлы в названии имеют маску ma2_годмесяц_день.txt При подставленный set "f=ma2_*.txt" не находит путь. |
Дмитрий_Кульгейко@vk, Предчувствия меня не обманули :), замените кусок кода из моего предыдущего поста, и будет Вам желаемое:
Код:
@Echo Off Set "FName=C:\ku-ku\tra la la\ma2_*.txt" И далее как в предыдущем посте
Код:
:ReLast А если файлы и переименовать нужно
как в Вашей предыдущей теме
Код:
@Echo Off |
Дмитрий_Кульгейко@vk,
для моего кода изменения такие: Код:
@echo off |
To: megaloman
Ура все работает. Спасибо всем за помощь. To: alpap Ваш код тоже работает, но результат сохраняет в файле с именем %A Посоветуйте книгу по написанию кода в cmd/bat. |
Цитата:
Цитата:
|
Спасибо.
|
alpap, спасибо буду учится.
megaloman, файлы действительно и переименовать надо было ))) По старому вопросу с датой в названии 316546, есть момент. День оказывается тоже может состоять как из двух цифр, так и из одной. |
Исправляю погрешности постановки: В имени файла день или месяц могут быть любыми (одно или двузначными)
Код:
@Echo Off |
Откорректировал год в двухзначный, не уверен что правильно, но работает )) получил:
Скрытый текст
@Echo Off Set "Sep===))" Set /A NSep=4 Set "FName=c:\TEMP\ma2_*_*.pdf" Set "Pref=12345_5_" Set "NewExt=.txt" SetLocal EnableExtensions EnableDelayedExpansion For %%f IN ("%FName%") DO Call :ReLast "%%f" GoTo :Eof :ReLast Del "%~1.tmp" 2>nul Set "Str=" FOR /F "usebackq delims=" %%s IN (`type "%~1"`) DO ( If Not "!Str!"=="" >>"%~1.tmp" Echo !Str! Set "Str=%%s" ) If Not "!Str:~-%NSep%!"=="%Sep%" Del "%~1.tmp" 2>nul & GoTo :Eof If "!Str:~0,-%NSep%!"=="" Del "%~1.tmp" 2>nul & GoTo :Eof >>"%~1.tmp" Echo !Str:~0,-%NSep%! >>"%~1.tmp" Echo !Str:~-%NSep%! FOR /F "usebackq tokens=2,3 delims=_" %%s IN ('%~n1') DO Set "YYYYMM=%%s" & Set "DD=0%%t" Set "MM=0!YYYYMM:~4,2! Set "Name=%~dp1%Pref%!YYYYMM:~2,2!!MM:~-2!!DD:~-2!%NewExt%" move /Y "%~1.tmp" "!Name!" >nul If Exist "!Name!" Del "%~1" 2>nul GoTo :Eof |
Дмитрий_Кульгейко@vk, Извините, забыл что год на выходе двузначный, в предыдущем посте я его исправил, в другой теме сейчас тоже сделаю, чтобы не плодить лишние посты
|
Да за что извиняться то. Это мне надо и значит я должен обо всем помнить)))
Значит я с годом угадал ? |
Время: 19:45. |
Время: 19:45.
© OSzone.net 2001-