Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26

Ошибка при создании файла

29.01.2014, 07:42. Показов 5915. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!!
Пишу батник который бы создавал sql скрипт, для занисения новых пользователей в базу mysql!!

Входной файл copy.txt имеет формат ( отдел, фио пользовптеля, логин, пароль, расшифровка пароля) поля разделены табуляцией ( просто tab-ом) входной файл делаю не я, мне его передают. Изменить его не могу!

На выходе хочу получить файл, после запуска которого на сервере mysql пользовтели попадут в базу!

Вот что мне уже удалось сделать

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Setlocal enabledelayedepension
 
Del .\1.sql
Set file=.\copy.txt
 
For /F "usebackq tokens=3,4 delims=    " %%i in ("%file%") Do (
Echo %%i %%j 
Echo set Ray=%%i
Echo set X=!Ray:~0,2!
Echo !X!
Echo GRANT execute ON *.* TO `%%i`@`%%` IDENTIFIED BY `%%j`; >>.\1.sql
rem Echo INSERT INTO dist_access(users,in_dist,ucomment) VALUES (`%%i`,64!X!, ``); >>.\1.sql
)
Pause
Данный батник у меня успешно работает, до той поры пока не убрать комментарий!!
Ошибка в том если раскоментировать последнию строчку выходит ошибка "Непредвиденное появление: %%i", в чем может быть причина! Помогите!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.01.2014, 07:42
Ответы с готовыми решениями:

Использование переменных при создании html-файла
Здравствуйте! У меня bat-файл создает html-страницу. Там предполагается использование переменных, которые передаются в него при...

Синтаксическая ошибка при создании архива через CMD
Задача: Создать архив файлов, находящихся в каталоге. Имя архивного файла должно состоять из текущего времени (ЧЧ.ММ.СС.rar), и помещен он...

Какую команду приписать в батнике, чтобы при создании файла приписывал свое имя?
какую команду приписать в батнике чтобы при создании файла приписывал свое имя?

21
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
29.01.2014, 07:58
Blueb1rd, удвойте проценты
0
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
29.01.2014, 09:27  [ТС]
Цитата Сообщение от sov44 Посмотреть сообщение
Blueb1rd, удвойте проценты
Удвоил проценты, теперь другая ошибка "Непредвиденное появление: VALUES."

Добавлено через 40 минут
Нашел на форуме в одной из тем про экранирование спец символов переписал последнею строку так
Bash
1
Echo INSERT INTO dist_access^(^users,in_dist,ucomment^)^ VALUES ^(^`%%i`,64!X!, ``^)^; >>.\1.sql
Все скобочки взял в крыжики!! :-)

В файл стали добовляться обе строки, но почему то перестало работать выражение !X! Ничего не выводит везде просто 64 и все, а хотя должно первые две цыфры от логина брать и дописовать после 64!! (
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
29.01.2014, 11:43
Цитата Сообщение от Blueb1rd Посмотреть сообщение
Setlocal enabledelayedepension
Setlocal EnableDelayedExpansion
0
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
29.01.2014, 12:27  [ТС]
Цитата Сообщение от sov44 Посмотреть сообщение
Setlocal EnableDelayedExpansion
У меня так и есть, просто когда перепечатывал допустил опечатку, на работе инета нету, пишу с планшета!
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
29.01.2014, 12:46
Blueb1rd, прикрепите вложением несколько строк текстового файла, потренируемся.
0
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
29.01.2014, 14:08  [ТС]
Цитата Сообщение от sov44 Посмотреть сообщение
Blueb1rd, прикрепите вложением несколько строк текстового файла, потренируемся.
файл тест.тхт, это тестовый входной файл, а 11.тхт это мой батник!
Вложения
Тип файла: txt test.txt (478 байт, 11 просмотров)
Тип файла: txt 11.txt (416 байт, 11 просмотров)
0
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
29.01.2014, 15:41
Blueb1rd,
то?
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Echo off
 
Setlocal EnableDelayedExpansion
 
del .\1.sql
Set file=.\test.txt
 
For /F "usebackq tokens=3,4 delims= " %%i In ("%file%") Do (
    set Ray=%%i
    set pass=%%j
    set "X=!Ray:~0,2!"
 
    Echo !Ray! - !pass!
    Echo !X!
    pause
    Echo GRANT execute ON *.* TO '!Ray!'@'%%%%' IDENTIFIED BY '!pass!'; >> .\1.sql
    Echo INSERT INTO dist_access^(users,in_dist,ucomment^) VALUES ^('!Ray!',64!X!,''^); >> .\1.sql
)
Pause
1
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
29.01.2014, 16:51
Лучший ответ Сообщение было отмечено Blueb1rd как решение

Решение

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Echo off
Setlocal EnableDelayedExpansion
 
if exist 1.sql del /q 1.sql
Set file=test.txt
 
For /F "usebackq tokens=3,4 delims= " %%i In ("%file%") Do (
    Echo %%i %%j
    set "Ray=%%i"
    set "X=!Ray:~0,2!"
    Echo !X!
    Echo GRANT execute ON *.* TO '%%%%i'@'%%%%' IDENTIFIED BY '%%%%j'; >>1.sql
    Echo INSERT INTO dist_access^(users,in_dist,ucomment^) VALUES ^('%%%%i',64!!X!!,''^); >>1.sql
)
Pause
1
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
30.01.2014, 07:39  [ТС]
Цитата Сообщение от @Root Посмотреть сообщение
Blueb1rd,
то?
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Echo off
 
Setlocal EnableDelayedExpansion
 
del .\1.sql
Set file=.\test.txt
 
For /F "usebackq tokens=3,4 delims= " %%i In ("%file%") Do (
    set Ray=%%i
    set pass=%%j
    set "X=!Ray:~0,2!"
 
    Echo !Ray! - !pass!
    Echo !X!
    pause
    Echo GRANT execute ON *.* TO '!Ray!'@'%%%%' IDENTIFIED BY '!pass!'; >> .\1.sql
    Echo INSERT INTO dist_access^(users,in_dist,ucomment^) VALUES ^('!Ray!',64!X!,''^); >> .\1.sql
)
Pause
Ага, почти то спасибо!! Только заменил %%%% на %% а то иначе лишний % появляется!!! И еще почему то после пароля вставляется табуляция (tab) я так и не понял почему!!

Добавлено через 3 минуты
Цитата Сообщение от sov44 Посмотреть сообщение
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Echo off
Setlocal EnableDelayedExpansion
 
if exist 1.sql del /q 1.sql
Set file=test.txt
 
For /F "usebackq tokens=3,4 delims= " %%i In ("%file%") Do (
    Echo %%i %%j
    set "Ray=%%i"
    set "X=!Ray:~0,2!"
    Echo !X!
    Echo GRANT execute ON *.* TO '%%%%i'@'%%%%' IDENTIFIED BY '%%%%j'; >>1.sql
    Echo INSERT INTO dist_access^(users,in_dist,ucomment^) VALUES ^('%%%%i',64!!X!!,''^); >>1.sql
)
Pause
Огромное спасибо, то что надо! Все ок! Да и проверочка на наличие удаляемого файла к месту!! :-) но только пришлось везде где %%%% менять на %% иначе везде перед логином и паролем появляется лишний символ %!! А так все отлично работает!! Спасибо!!!

Добавлено через 1 час 34 минуты
sov44, @Root: почти обрадовался но возникла другая проблемка!! Может подскажите??
Дело в следующем!!
Логины все числовые состоят из 6 случайных чисел и могут начинаться с 0, допустим 010001, или 076543, в первой строке которая пишется в файл все правильно, ошибка во второй строке а именно в переменной !Х! Там надо убирать перый 0 тоесть чтоб записывалось в файл не 6401, а 641 и соответственно не 6407 а 647! С данными которые начинаются не с 0 все отлично и работает правильно!

Изменил следующею строку
Bash
1
set /a "X=!Ray:~0,2!"
Добавил /а
Теперь 0 исчезает из переменной Х, но это работает только от 01 до 07, на 08 и 09 появляется следущая ошибка
"Неправильное число. Числовые константы должны быть десятичными (17) шестнадцатеричными (0х11), или восмеричными (021)"
Как правильно убрать 0 перед числом?
0
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
30.01.2014, 08:58
Blueb1rd,
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
 
Setlocal EnableDelayedExpansion
 
set sqlFile=1.sql
set testFile=test.txt
set "at=%%"
 
if exist %sqlFile% del /q %sqlFile%>nul
 
for /f "usebackq tokens=3,4 delims= " %%i in ("%testFile%") do (
    set Ray=%%i
    set pass=%%j
    set "X=!Ray:~0,2!"
::Умножаем на единицу, получаем число
    set /a y=!X!*1
    echo !Ray! - !pass!
    echo !Y!
    pause
    echo GRANT execute ON *.* TO '!Ray!'@'%at%' IDENTIFIED BY '!pass!'; >> %sqlFile%
    echo INSERT INTO dist_access^(users,in_dist,ucomment^) VALUES ^('!Ray!',64!Y!,''^); >> %sqlFile%
)
pause
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
30.01.2014, 08:59
Не понял. Где убрать ноль - если он стоит первым символом или в любом месте в переменной Ray ?
0
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
30.01.2014, 09:00
не вижу я табуляции нигде.
sov44,
числа вида 01, 02, 03 ... надо преобразовать в 1,2,3 ...
Миниатюры
Ошибка при создании файла  
0
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
30.01.2014, 09:39  [ТС]
Цитата Сообщение от sov44 Посмотреть сообщение
Не понял. Где убрать ноль - если он стоит первым символом или в любом месте в переменной Ray ?
Первые нули убрать из переменной !Х! Щас там хранится 01, 02, ..., 09, 10, 11 и т.д. а надо чтоб в переменной !Х! Были 1, 2, ... 9, 10, 11 и т.д.?? Вот как то так!!!
0
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
30.01.2014, 09:41
Blueb1rd,
https://www.cyberforum.ru/post5713762.html
наличие tab в delims= " проверьте в этом коде
0
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
30.01.2014, 09:49  [ТС]
Цитата Сообщение от @Root Посмотреть сообщение
не вижу я табуляции нигде.
Странно у меня она (табуляция) есть!!!

И еще умножение на 1 не дает ни какого результата таже ошибка!! При 08 и 09!!
Миниатюры
Ошибка при создании файла  
0
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
30.01.2014, 09:52  [ТС]
Цитата Сообщение от @Root Посмотреть сообщение
Blueb1rd,
https://www.cyberforum.ru/post5713762.html
наличие tab в delims= " проверьте в этом коде
Таб там есть!!
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
30.01.2014, 09:59
Blueb1rd, добавьте строчку после set Ray=%%i
Bash
1
if "!Ray:~0,1!"=="0" set Ray=!Ray:~1!
2
⁞ ★☭ Mad Max ☭★ ⁞
279 / 84 / 12
Регистрация: 04.09.2013
Сообщений: 187
30.01.2014, 10:01
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Цитата Сообщение от Blueb1rd Посмотреть сообщение
таже ошибка!!
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
 
Setlocal EnableDelayedExpansion
 
set sqlFile=1.sql
set testFile=test.txt
set "at=%%"
 
if exist %sqlFile% del /q %sqlFile%>nul
 
for /f "usebackq tokens=3,4 delims= " %%i in ("%testFile%") do (
    set Ray=%%i
    set pass=%%j
    set "X=!Ray:~0,2!"
    set X=!X:~0,1!
    if !X! equ 0 (set Y=!Ray:~1,1!) else (set Y=!Ray:~0,2!)
    echo !Ray! - !pass!
    echo !Y!
    pause
    echo GRANT execute ON *.* TO '!Ray!'@'%at%' IDENTIFIED BY '!pass!'; >> %sqlFile%
    echo INSERT INTO dist_access^(users,in_dist,ucomment^) VALUES ^('!Ray!',64!Y!,''^); >> %sqlFile%
)
pause
насчет таба - я свой код имел в виду.
2
2 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 26
30.01.2014, 10:11  [ТС]
Спасибо огромное вам!!! Все работает!!! Урааа!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.01.2014, 10:11
Помогаю со студенческими работами здесь

Ошибка при создании компьютера в домене
При создании компьютера в домене (WinServer 2003) выскакивает ошибка: Пробовал перезапускать - не помогло. Проверил sfc /scannow -...

При отправке файла при помощи TFTP в логе появляется запись: "Синтаксическая ошибка в имени файла"
Здравствуйте! Использую такую команду: >tftp 192.x.x.150 get C:\scan\file_555.txt 192.x.x.68 Хочу с 150-го компа перекинуть файлик на...

Ошибка при создании .com файла
Здравствуйте. Помогите новичку разобраться как в windows 7 64x создать файл .com При создании выдает ошибку:

Ошибка при создании файла
ВСЕМ ПРИВЕТ, скажите, как сделать, чтобы при чтении файла не выкинуло а функция ERROR была больше еденицы.

Ошибка при создании файла
При попытке создать файл с помощью консольного приложения C# MVS кидает ошибку: System.UnauthorizedAccessException: "Отказано в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru