Пользователи Windows часто бывают обделены возможностью создания полноценных сценариев с использованием bash, perl или php. Поэтому приходится использовать то что есть. В Windows есть Windows Script. Эта штуковина поддерживает JavaScript или VBScript сценарии. Где-то слышал, что ActivePerl тоже можно. Очень интересно.
Вот, к примеру, нам нужно используя только стандартные средства изменить формат текстового лога. На входе у нас есть оригинальный файл, список замен и правила преобразования.
Оригинальный файл содержит время прохода сотрудника:
007 01.04.08 07:39:59 0 00 Леоненко Александра Владимировна
007 01.04.08 07:41:53 0 00 Шарифов Рустам Тофикович
007 01.04.08 07:42:30 0 00 Емельянова Татьяна Викторовна
007 01.04.08 07:42:37 0 00 Лопухов Дмитрий Владимирович
007 01.04.08 07:43:28 0 00 Власова Елена Александровна
007 01.04.08 07:47:27 0 00 Казакова Екатерина Алексеевна
007 01.04.08 07:47:30 0 00 Черкасова Наталья Юрьевна
007 01.04.08 07:47:47 0 00 Красилов Павел Александрович
Список сотрудников экспортирован из 1С (текст, разделенный табуляцией):
Советникова Наталья Викторовна Ювелир-монтировщик 0000000028
Сычева Марина Юрьевна Ювелир-монтировщик 0000000072
Сычугова Наталья Владимировна Кладовщик на складе ценников 0000000027
Сычугова Татьяна Валерьевна Контролер по качеству 0000000030
Тарлакова Валентина Валерьевна Ювелир-полировщик 0000000032
Тымчишин Наталья Васильевна Кладовщик на складе ценников 0000000060
Упорова Татьяна Ивановна Уборщица 0000000063
Фомина Ирина Николаевна Ювелир-монтировщик 0000000059
Задача: Преобразовать файл для удобной загрузки в mysql. Выходной файл должен быть следующего вида:
2008-04-01 07:39:59 16
2008-04-01 07:41:53 54
2008-04-01 07:42:30 13
2008-04-01 07:42:37 44
2008-04-01 07:43:28 0
2008-04-01 07:47:27 6
2008-04-01 07:47:30 28
2008-04-01 07:47:47 60
Дата в формате YYYY-MM-DD hh:mm:ss и вместо ФИО — табельный номер
Очень просто выполнить такую операцию используя объект WScript.StdIn
var cin = WScript.StdIn;
var input = cin.ReadAll();
Теперь в input содержится содержимое стандартного ввода. Отправить файл в стандартный ввод можно выполнив команду
cscript //nologo script.js < eventlog.txt
cscript вывалит результат работы в стандартный поток вывода. Не забыть перенаправить этот вывод в файл.
cscript //nologo script.js < eventlog.txt > outfile.txt
Остается только загрузить выходной файл в mysql.
load data local infile 'outfile.txt' into table `eventlog` character set cp1251 lines terminated by '\r\n';
Скачать архив с кодом