Показать полную графическую версию : [решено] Поиск и копирование текста из одного ini-файла в другой с помощью bat-ника
Требуется батник для следующей задачи:
в ini-файле есть строка, состоящая из двух частей. Первая часть строки состоит из всегда одинакового текста
Id = VLTE-
за которым следует вторая часть строки, содержащая периодически меняющийся текст, состоящий из латиницы, пробелов, знаков подчёркивания, точек и тире, т.е. минусов. Требуется с помощью батника скопировать текст, начиная с VLTE-, и до конца строки в другой ini-файл. Содержание этого второго ini-файла будет состоять из одной строки, содержащей скопированный текст, заключённый в кавычки, за которым будет следовать текст (без кавычек, кавычки привожу, чтобы показать пробелы):
" ---> " и текущая дата.
В итоговом ini-файле должно получиться что-то типа такого: "VLTE-набор букв латиницей и перечисленных выше символов"три пробела--->три пробела11.08.2016
P.S. Если второй ini-файл уже существует, нужно его перезаписать.
Если в файле строка вида
Id=VLTE-
то можно так:
@echo off
set "f_in=file1.ini"
set "f_out=file2.ini"
<"%f_in%">"%f_out%" (for /f "delims=" %%a in ('find "Id"') do @set "%%a"& cmd/v/c echo "!Id!" ---^^^> %date%)
exit
если именно так как указано, то так:
@echo off
set "f_in=file1.ini"
set "f_out=file2.ini"
<"%f_in%">"%f_out%" (for /f "tokens=2* delims==" %%a in ('find "Id"') do @set "s=%%a%%b"& cmd/v/c echo "!s:~1!" ---^^^> %date%)
exit
Если второй ini-файл уже существует, нужно его перезаписать. »
Конечный файл так или иначе перезапишется или создасться.
если именно так как указано, то так: »
Да, лучше именно так, как указано. Попробовал второй вариант - работает, но только если оба ini-файла находятся рядом с bat-файлом. На самом же деле второй ini-файл должен располагаться в находящейся рядом с bat-ником папке (извиняюсь, забыл об этом предупредить). Пробовал добавить путь, но с ним скрипт не работает (абсолютные пути в данном случае не подходят, т.к. на разных компах они сильно отличаются, а компов много). Можно ли это как-то поправить?
И ещё есть один вопрос: насколько вижу, скрипт выполняет поиск нужного текста по буквосочетанию "Id". Но "Id" может встречаться в ini-файле не только в искомой строке, но и в других строках. Это проблем не вызовет, на корректность поиска не повлияет?
Это проблем не вызовет, на корректность поиска не повлияет? »
с учетом
Первая часть строки состоит из всегда одинакового текста »
у меня выбора -то и нет, могу разве вместо ...find "Id"..., предложить:
...more^|findstr/r /c:"^Id"...
т.е. поиск строки, начинающейся с Id
(абсолютные пути в данном случае не подходят, т.к. на разных компах они сильно отличаются, а компов много). Можно ли это как-то поправить? »
надо несколько вариантов путей, тогда мне понятней будет чтобы поправить.
могу разве вместо ...find "Id"..., предложить: »
Неизменная часть строки, по которой целесообразно вести поиск это приведённый у меня вариант (табуляция, Id, табуляция, знак равно, пробел, VLTE-):
Id = VLTE-
т.е. в поиске этот кусок целесообразно использовать целиком, т.к. он не повторяется, в отличие от двухбуквенного "Id", который может присутствовать и в других местах, кроме искомой строки.
Что касается путей, то выглядеть это будет так: папка, в которой лежат bat-файл и ini-файл с исходным текстом \ папка, в которой должен располагаться итоговый ini-файл, т.е. примерно так:
folder1\file.bat
folder1\file-in.ini
folder1\folder2\file-out.ini
Nun-Nun,
Наконец что-то прояснилось:
@echo off
set "f_in=file-in.ini"
set "f_out=%~dp0folder2\file-out.ini"
<"%f_in%">"%f_out%" (for /f "tokens=3*" %%a in ('more^|findstr/rc:"^ Id = VLTE-\>"') do @echo "%%a%%b" ---^^^> %date%)
exit
.
alpap,
Попробовал. Не работает. В папке folder2 появляется выходной ini-файл, но в нём ничего нет, он пустой.
Не работает »
Точно, стоит один раз не проверить и приехали, исправил и проверил:
@echo off
set "f_in=file-in.ini"
set "f_out=%~dp0folder2\file-out.ini"
<"%f_in%">"%f_out%" (for /f "tokens=3*" %%a in ('more^|findstr/rc:"^[ ]*Id[ ]*=[ ]VLTE-"') do @echo "%%a%%b" ---^^^> %date%)
exit
.
Работает, но некорректно. Вот что оказывается записанным в итоговый ini-файл:
"VLTE-H7LMET. L.M07-635" ---^> 12.08.2016 , а должно быть: "VLTE-H7L MET. L.M07-635" ---> 12.08.2016
Т.е. не хватает одного пробела и присутствует символ ^
Угу? Когда cmd/v убрал забыл изменить:
@echo off
set "f_in=file-in.ini"
set "f_out=%~dp0folder2\file-out.ini"
<"%f_in%">"%f_out%" (for /f "tokens=3*" %%a in ('more^|findstr/rc:"^[ ]*Id[ ]*=[ ]VLTE-"') do @echo "%%a %%b" ---^> %date%)
exit
Так правильно.
alpap,
Да, так работает. Я это уже и сам поправил. Благодарю за помощь!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.