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

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

Ответить
Настройки темы
CMD/BAT - Поиск и замена текста в файле

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


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

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


Изменения
Автор: Дмитрий_Кульгейко@vk
Дата: 10-07-2016
Здравствуйте.
Прошу помощи.

Есть файл с именем 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%

Отправлено: 18:51, 10-07-2016

 

Ветеран


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

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


Код: Выделить весь код
@echo off
set "f=1.txt"
<"%f%">$ (
 for /f "delims=" %%a in ('more') do @(
  echo %%a|>nul findstr/ec:"== ))" && (
   for /f "tokens=1,2 delims=:" %%b in ("%%~a") do @(
    echo %%b::
    echo %%c
   )
  ) || (
   echo %%a
  )
 )
)& move $ "1.txt"
exit
.

Отправлено: 20:28, 10-07-2016 | #2



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

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


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


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

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


Опробовал код. Что-то не совсем так.
Переход на новую строку произошел, но вместо символов "== ))" стоит 0

Отправлено: 21:38, 10-07-2016 | #3


Аватара для NickM

Ветеран


Contributor


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

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


вот, надергал куски из сети ))
Код: Выделить весь код
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
Set infile=in.txt
Set outFile=out.txt

:: Узнаем количество строк в файле
for /f %%n in ( 'more ^< "!infile!" ^| find /c /v ""' ) do (
	set tail.count=%%n
)

:: Модифицируем две последние строки в файле 
for /f "UseBackQ delims=" %%n in ("%infile%") do ( 
  set "LINE=%%n"
  set /a m+=1  
  if !m! EQU !tail.count! (goto funcR) else (echo=!LINE!>>"%outFile%")
)
:funcR
set LINE=%LINE:~0,-5%
echo=%LINE%>>"%outFile%"
echo.== ))>>"%outFile%"

Отправлено: 22:02, 10-07-2016 | #4


Ветеран


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

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


Дмитрий_Кульгейко@vk,
А не подскажете, почему у меня все работает? Даже кодировку такую поставил, хоть тут она роли и не играет (читабельность - не в счет):
Файл 138004

Последний раз редактировалось alpap, 28-07-2016 в 00:25.


Отправлено: 22:30, 10-07-2016 | #5


Ветеран


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

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


Подозреваю что в файле далеко не "текст::== ))", выложите файл сюда, посмотрим.

Отправлено: 22:32, 10-07-2016 | #6


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


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

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


Вложения
Тип файла: txt ma2_20166_28.txt
(212 байт, 7 просмотров)

Изначально файл такой как во вложении. Числа в имени файла меняются.

Последний раз редактировалось Дмитрий_Кульгейко@vk, 10-07-2016 в 22:55.


Отправлено: 22:41, 10-07-2016 | #7


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


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

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


To: alpap
Если убираю все кроме последней строки, ваш код работает.

To: NickM
Ваш код тоже работает если у файла постоянное имя.

Отправлено: 22:57, 10-07-2016 | #8


Ветеран


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

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


Дмитрий_Кульгейко@vk,
Мало того что в строках еще есть :, откуда мне знать, а он у меня в разделителях, так еще вы приводите строку "текст::== ))", а на самом деле "текст::==))":
Код: Выделить весь код
@echo off
set "f=1.txt"
<"%f%">$ (
 for /f "delims=" %%a in ('more') do @(
  echo %%a|>nul findstr/ec:"==))" && (
   for /f "tokens=1* delims==" %%b in ("%%~a") do @(
    echo %%b
    echo ==%%c
   )
  ) || (
   echo %%a
  )
 )
)
move $ "1.txt"
exit
.

Отправлено: 00:07, 11-07-2016 | #9


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off

	Set "Sep===))"
	Set /A NSep=4
	Set "FName=ma2_20166_28.txt"

SetLocal EnableExtensions EnableDelayedExpansion
Call :ReLast "%FName%"
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%!
Move /Y "%~1.tmp" "%~1" >nul
GoTo :Eof
Дмитрий_Кульгейко@vk, Основные действия оформлены в виде процедуры, возможно, Вам потом захочется еще сделать цикл по файлам. Скрипт не изменит файл, у которого последняя строка
Код: Выделить весь код
==))

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 11-07-2016 в 09:15.


Отправлено: 08:56, 11-07-2016 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Сложная замена текста в файле niverprof Скриптовые языки администрирования Windows 11 22-12-2014 11:45
CMD/BAT - BAT поиск текста в файле с условием rosalin Скриптовые языки администрирования Windows 10 05-05-2014 14:56
VBS/WSH/JS - [решено] замена текста в файле по шаблону dembel_zone Скриптовые языки администрирования Windows 12 29-12-2013 19:21
CMD/BAT - Поиск и удаление текста в файле ajakzs Скриптовые языки администрирования Windows 6 18-10-2012 09:18
[решено] Поиск и замена текста в файле TERMINAL AutoIt 6 16-03-2011 17:49




 
Переход