Delleter
04-10-2015, 16:54
Доброго времени суток!
Есть каталог, в котором находится большое количество текстовых файлов с именами 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 и так далее.
Непонятно, как сделать так, что б искался именно текст, а не строка. Также непонятно, как это всё запихнуть в цикл, что б перебирать файлы.
Буду очень признателен за помощь.
Есть каталог, в котором находится большое количество текстовых файлов с именами 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 и так далее.
Непонятно, как сделать так, что б искался именно текст, а не строка. Также непонятно, как это всё запихнуть в цикл, что б перебирать файлы.
Буду очень признателен за помощь.