Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] разбор файла и запросы в базу mysql (http://forum.oszone.net/showthread.php?t=259484)

judipav 26-04-2013 22:31 2140241

разбор файла и запросы в базу mysql
 
Доброго времени суток уважаемые форумчане!
захотелось мне тут немного поиграться.
есть файл с данными - хочу его разобрать bat-ником и загнать в mysql в процессе каждую строку файла с данными на выходе пронумеровать счетчиком.
скрипт нехитрый но то ли лыжи не едут то ли что-то идет "не так".

Код:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

REM создаем таблицу в базе
C:\AppServ\MySQL\bin\mysql.exe -u root --password=123456 -e "USE `hardware`; CREATE TABLE `1` (`id` int not null, `desc` varchar(255), `count` int); "   
    set /a CNT=1    REM счетчик строк

    for /f "tokens=1,2 delims=;" %%k in (1.txt) do (
        C:\AppServ\MySQL\bin\mysql.exe -u root --password=123456 -e "USE `hardware`; INSERT INTO `1` VALUES (%CNT%, '%%k', %%l); "

        set /a CNT+=1    REM по-идее должен инкрементировать но...
        )

интересуют две вещи:
во-первых текстовый файл и поле desc в кодировке cp1251, в поле desc вместо русских букв я получаю знаки вопроса.
безуспешно игрался с кодировками файла и поля desc, использовал utf8_general_ci при этом изменял запрос на
Код:

INSERT INTO `1` VALUES ('%CNT%', CONVERT('%%k' USING utf8), %%l);
в результате поле вообще остается пустым

во-вторых счетчик CNT всегда равен "1"

Iska 27-04-2013 08:45 2140344

Цитата:

Цитата judipav
во-вторых счетчик CNT всегда равен "1" »

«enabledelayedexpansion» (это у Вас есть) + «!CNT!» внутри скобок:
Код:

@echo off
setlocal enabledelayedexpansion


for /f "tokens=1,2 delims=;" %%k in (1.txt) do (
    C:\AppServ\MySQL\bin\mysql.exe -u root --password=123456 -e "USE `hardware`; INSERT INTO `1` VALUES (!CNT!, '%%k', %%l);


judipav 27-04-2013 12:41 2140414

Прошу прощения, мне очень стыдно за свою необразованность.
Где можно прочитать об использовании восклицательных знаков обрамляющих переменную, в моем справочнике я ни слова о них не нашел.

Iska 27-04-2013 14:39 2140447

Цитата:

Цитата judipav
Где можно прочитать об использовании восклицательных знаков обрамляющих переменную »

Код:

setlocal /?
в части «enabledelayedexpansion»/«disabledelayedexpansion». Также, под Windows XP:
Код:

hh.exe "mk:@MSITStore:C:\WINDOWS\Help\ntcmds.chm::/setlocal.htm"
Под Windows 7:
Код:

hh.exe "ms-its:C:\WINDOWS\Help\CommandReference.chm::/html/e4e4b6d3-3f1a-4851-a782-25ee2470e16e.htm"
предварительно загрузив: Download Windows Command Reference from Official Microsoft Download Center, поместив его в «%SystemRoot%/Help» и, возможно, разблокировав:

его после загрузки.

Также обязателен к прочтению Урок bat-аники.

judipav 28-04-2013 12:12 2141054

значение директивы SETLOCAL ENABLEDELAYEDEXPANSION мне был понятен, а вот касательно "!...!" ключевые слова нашел в "Уроке bat-аники":

Цитата:

Подстановка переменной происходит до того, как она будет изменена в процессе выполнения блока.
Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования.
Это то что нужно, спасибо! Проблема решена.


Время: 08:18.

Время: 08:18.
© OSzone.net 2001-