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

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

Ответить
Настройки темы
CMD/BAT - [решено] Множественная замена текста в файлах текстом из другого файла

Аватара для Delleter

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


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

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


Доброго времени суток!
Есть каталог, в котором находится большое количество текстовых файлов с именами 1.txt, 2.txt и так далее до, например, 56.txt. Также в этом каталоге лежит файл с именем replace.txt.
Сожержимое файлов 1.txt, 2.txt и так далее одинаковое:
Код: Выделить весь код
"Ap_s"= 1.781'**пропускная
"Kd2"= ( 4.906 - 0.5 ) * 2'**коэф диф в осевом d_напорн / b
"delta"= 4.188'**рад зазор
"D1@Эскиз29"= "rk" * 2 + "delta"
"D29@Эскиз1"= "rk" * 2 + "delta"
Сожержимое файла replace.txt:
Код: Выделить весь код
1.721	4.916	4.188
1.781	4.906	4.388
1.741	4.936	3.988
...
т.е. в нем 56 строк, в каждой по 3 числа, разделенных пробелами.
Необходимо сделать батник, запустив который, произойдет следующее:
В файле 1.txt числа 1.781, 4.906, 4.188 заменятся на соответствующие числа из файла replace.txt, находящиеся в первой строке. Затем тоже самое проихойдет в файле 2.txt, только числа берутся уже со второй строки и так далее.

Нашел батник, который может менять определенные строки в одном файле строками из другого файла:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемый файл
Set file=e:\Temp\list 1.txt
:: Файл с заменами (содержит только две строки по условию задачи)
Set filechang=e:\Temp\list 2.txt
:: Два образца строк, подлежащих замене
Set srt1=First text
Set srt2=Second text

Set cnt =0
For /F "usebackq tokens=* delims=" %%i In ("%filechang%") Do (
	Set /A cnt +=1
	Set chang!cnt!=%%i
)
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do (
	If "%%i"=="%srt1%" (
		Echo %chang1%>>test.txt
	) Else (
		If "%%i"=="%srt2%" (
			Echo %chang2%>>test.txt
		) Else (
			Echo %%i>>test.txt
		)
	)
)
Copy test.txt "%file%" /Y>Nul
Del test.txt>Nul
но он не подходит тем, что заменяет именно строки строками.
Файл replace.txt впринципе можно переформатировать, заменив все пробелы переходами на следующую строку, таким образом для замены чисел из файла 1.txt потребуются первые 3 строки файла replace.txt и так далее.
Непонятно, как сделать так, что б искался именно текст, а не строка. Также непонятно, как это всё запихнуть в цикл, что б перебирать файлы.
Буду очень признателен за помощь.

Отправлено: 16:54, 04-10-2015

 

Ветеран


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

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


Цитата Delleter:
Сожержимое файлов 1.txt, 2.txt и так далее одинаковое... »


Код: Выделить весь код
@<"replace.txt" (
for /f "tokens=1-3" %%i in ('more') do @(
 set/a n+=1
 for /f %%? in ('set/a n') do @>"%%?.txt" (
  echo "Ap_s"= %%i'**пропускная
  echo "Kd2"= ( %%j - 0.5 ^) * 2'**коэф диф в осевом d_напорн / b
  echo "delta"= %%k'**рад зазор
  echo "D1@Эскиз29"= "rk" * 2 + "delta"
  echo "D29@Эскиз1"= "rk" * 2 + "delta"
 )
)
)
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:27, 04-10-2015 | #2



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

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


Аватара для Delleter

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


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

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


Georgio, вот это да, я даж не подумал, что искать нужные числа не надо, можно просто заменять исходные файлы новыми с нужными числами... спасибо огромное!

Отправлено: 20:24, 04-10-2015 | #3


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


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

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


ДД)

У меня примерно такая же задача.
Имеется 1000 папок с разными именами:
abakan
abaza
abdulino
abinsk
achinsk
adygejsk
и т.д.

В каждой папке есть файл index.html со словом Москва, которое встречается несколько раз в коде
Также есть файл Replace.txt с названиями городов:
Абакан
Абаза
Абдулино
Абинск
Ачинск
и т.д.

Нужно в каждой папке в файле index.html заменить слово Москва на соответствующее папке название города на кириллице.

Отправлено: 02:22, 16-06-2017 | #4


Ветеран


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

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


n_stein@vk, упакуйте пару-тройку файлов index.html (если они разные) или один файл index.html (если они все одинаковые) в архив и приложите последний к сообщению. Это раз.

Второе. Составьте перечень однозначного соответствия между списком:
Цитата n_stein@vk:
abakan
abaza
abdulino
abinsk
achinsk
adygejsk »
и списком:
Цитата n_stein@vk:
Абакан
Абаза
Абдулино
Абинск
Ачинск »

Отправлено: 05:16, 16-06-2017 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Множественная замена слов в файлах .html willss Скриптовые языки администрирования Windows 5 07-12-2015 22:19
CMD/BAT - замена текста в нескольких файлах Alexander_88 Скриптовые языки администрирования Windows 7 03-09-2014 18:33
Любой язык - [решено] Пакетная замена текста в файлах Seryoga204 Скриптовые языки администрирования Windows 2 29-09-2013 15:29
VBS/WSH/JS - [решено] Замена текста из другого файла ul9 Скриптовые языки администрирования Windows 46 28-10-2012 04:01
CMD/BAT - [решено] Замена части текста в txt файлах Traveller124 Скриптовые языки администрирования Windows 7 02-04-2012 19:16




 
Переход