Задать вопрос
@KTG

Как сделать конфиг для CMD/BAT с массивом параметров?

Ситуация такая, раз в N дней присылают файлы TXT.
Нужно их загружать в базу.
На данный момент у меня работает так: Батник смотрит в цикле все файлы txt в указанном каталоге, берёт их имена, и просто вызывает соответствующий скрипт: test.txt запускает test.sql и test.ctl. Оба файла описаны вручную. Но хочется от них избавиться.
Хочу описать структуру таблиц в файле конфига, что бы батник сам формировал для sql и ctl скрипты и можно было в любой момент подправить. Что бы из него можно было взять массив структуры БД и работать с ней в bat-нике.
В итоге получить файл настроек, что-то вроде этого:
### Main settings
------------------------------------------
DataOutDir=./Out
LogDir=./Logs

### Tables
------------------------------------------
Tables[1][Name]=Collections
Tables[1][Comment]="Таблица коллекций"

   Tables[1][F1][Name]=Id
   Tables[1][F1][Type]=Number
   Tables[1][F1][Comment]="Идентификатор"

   Tables[1][F2][Name]=Name
   Tables[1][F2][Type]=Varchar2(100)
   Tables[1][F2][Comment]="Наименование"

Tables[2][Name]=Categories
Tables[2][Comment]="Таблица категорий"

   Tables[2][F1][Name]=Id
   Tables[2][F1][Type]=Number
   Tables[2][F1][Comment]="Идентификатор"

   Tables[2][F2][Name]=Name
   Tables[2][F2][Type]=Varchar2(100)
   Tables[2][F2][Comment]="Наименование"

   Tables[2][F3][Name]=Parent_cat
   Tables[2][F3][Type]=Varchar2(100)
   Tables[2][F3][Comment]="Родительская категория"


Ну и суть вопроса: как быть?
Примеры обычного файла настроек я находил в интернете, но не понятно что делать с массивами.
Или может у кого есть более интересный вариант?
  • Вопрос задан
  • 514 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@res2001
Developer, ex-admin
Массивов в cmd нет, но можно их имитировать, генерируя имя переменной на лету:
set "VAL_%IDX1%_%IDX2%=%VALUES%"
где переменные IDX1 и IDX2 содержат соответствующие индексы. Вместо индексов, можно использовать,например имена полей из конфига.
Если структура достаточно большая то переменных будет много. На мой взгляд - это какой-то тупиковый вариант.

Еще проще: конфиг пишите в формате объявления переменных для cmd (т.е. set "Tables_2_f1_name=Id") файлу дайте расширение bat или cmd (или до запуска копируйте конфиг в bat/cmd) и просто вызывайте его как вложенный батник:
call config.bat
Если в конфиге не указывать команду set непосредственно, то напрямую вызвать его через call не получится, но можно в простом цикле читать конфиг построчно и подставлять в команду set.

Возможно было бы проще на каждую строку данных из файла фильтровать конфиг с помощью findstr, в
ыбирая нужную строку. После первой фильтрации конфиг будет закэширован и последующие фильтрации будут происходить быстрее.
Или, если структуры меняются редко, просто зашить их в код батника.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
может быть используйте повершелл. он очень сильно медленный но зато в нем есть массивы и "возможно программирование".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы