|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe |
|
CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe
|
Пользователь Сообщения: 102 |
Профиль | Отправить PM | Цитировать
добрый день!
необходимо создать батник, который делает такое 1. по пути "C:\INFO\" имеется файл вида "readDDMM.001" (пример файла во вложении, кодировка DOS) где DD и MM день и месяц соответственно, в нем необходимо найти текст (имя файла) "*.arj" (* - постоянно меняется) 2. создать текстовый файл "get.txt" по пути "C:\БИКИ\get\" стекстом "get mfo *.arj" 3. из "C:\INFO\" файл "readDDMM.001" переместить в папку "C:\INFO\сегодняшняя дата в формате «год.месяц.число» (пример 2012.05.21)" (для того что бы повторно не прочитался файл) 4. сканировать папку "C:\BNK\IZM\" на появление архива "*.arj", его необходимо распаковать в туже папку 5. необходимо запустить досовское ПО по пути "C:\BNK\01RKC#.exe" 6.появится ошибка, необходимо кликнуть как то на «ignore» 7. закрыть ПО двойным нажатием "ESC" 8. на сетевом диске "Z:\" изменить имя папки "DAT" на нынешнюю дату в формате год.месяц.число (пример 2012.04.18) 9. скопировать папку "DAT" из "C:\BNK\" на сетевой диск "Z:\" 10. P.s. было бы не плохо сделать что бы он постоянно сканировал папку "C:\INFO\" на появление файла "readDDMM.001" и только когда появился файлик он начал те действия что описаны выше 11. отправить сообщение о завершении обновлений получился очень хороший батник: @Echo Off rem Пути Set ReadPath=C:\INFO Set GetPath=C:\biki\get Set ARJPath=C:\BNK\IZM rem Таймаут проверки файлов, в секундах Set Timeout=10 Set /A Timeout+=1 If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1 rem Подготавливаем структуру директорий If Not Exist "%GetPath%" MD "%GetPath%" :Loop Set ARJName=&Set NFOName= rem Поиск файла For /F "delims=" %%F In ('Dir "%ReadPath%\read*.*" /B') Do ( Set NFOName=%%F rem Поиск в найденном строки с архивом For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do ( rem Разбор строки на составляющие, вычленение имени архива For %%A In (%%S) Do ( Echo %%A|Find /I "arj">nul&&Set ARJName=%%A ) ) ) If Defined ARJName ( Echo Found %NFOName%, processing... rem Создаем get-файл Echo get mfo %ARJName%>"%GetPath%\get.txt" rem Перемещаем обработанный файл, чтобы исключить повторное прочтение rem Если в системе установлен другой формат даты - исправить. For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A" Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%" ) :WaitForARJ rem Распаковка архива, или ожидание, если он ещё не появился If Exist "%ARJPath%\%ARJName%" ( c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\ Echo Archive %ARJName% successfuly extracted rem Запускаем программу Start "" "C:\BNK\01RKC#.EXE" Ping -n 10 127.0.0.1>nul taskkill /IM ntvdm.exe rem Делаем бэкап баз For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( If Not Exist "D:\%%C.%%B.%%A" ( Ren "y:\DAT" "%%C.%%B.%%A" 2>nul||MD "D:\%%C.%%B.%%A" Xcopy "C:\BNK\DAT" "y:\DAT" /E /I /Y /Q msg console /server:*.*.*.* "обновление завершено" ) ) ) Else ( Echo Waiting for ARJ in %ARJPath% Ping -n %Timeout% 127.0.0.1>nul GoTo WaitForARJ ) ) rem Уход на новую итерацию после таймаута Cls&Echo Scanning %ReadPath%... Ping -n %Timeout% 127.0.0.1>nul GoTo Loop Спасибо за помощь! |
|
Отправлено: 15:07, 21-05-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Anufriev:
|
|
Отправлено: 16:08, 21-05-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать в таком случае я был бы очень благодарен, если бы мне помогли в написании этого скрипта
|
Отправлено: 18:23, 21-05-2012 | #3 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Anufriev, установите приемлемый для вас таймаут сканирования, я по умолчанию 10 секунд поставил. Чтобы окошками черными прыгающими бухгалтеров не стращать, запускайте этот батник свернутым или вообще без видимого окна (поищите, есть утилиты для этого).
Команды распаковки arj-архива вставлять не стал, сами вставите, т.к. я не знаю, какой у вас архиватор там для этих целей. Батник будет висеть и раз в %Timeout% секунд проверять наличие файлов\обрабатывать их. @Echo Off rem Пути Set ReadPath=C:\INFO Set GetPath=C:\БИКИ\get Set ARJPath=C:\BNK\IZM rem Таймаут проверки файлов, в секундах Set Timeout=10 Set /A Timeout+=1 If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1 rem Подготавливаем структуру директорий If Not Exist "%GetPath%" MD "%GetPath%" If Not Exist "%ReadPath%\old" MD "%ReadPath%\old" :Loop Set ARJName=&Set NFOName= rem Поиск файла For /F "delims=" %%F In ('Dir "%ReadPath%\read*.001" /B') Do ( Set NFOName=%%F rem Поиск в найденном строки с архивом For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do ( rem Разбор строки на составляющие, вычленение имени архива For %%A In (%%S) Do ( Echo %%A|Find /I "arj">nul&&Set ARJName=%%A ) ) ) If Defined ARJName ( Echo Found %NFOName%, processing... rem Создаем get-файл Echo get mfo %ARJName%>"%GetPath%\get.txt" rem Переименовываем обработанный файл, чтобы исключить повторное прочтение rem Если в системе установлен другой формат даты - исправить. For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( Move "%ReadPath%\%NFOName%" "%ReadPath%\old\%%C.%%B.%%A_%NFOName%" ) :WaitForARJ rem Распаковка архива, или ожидание, если он ещё не появился If Exist "%ARJPath%\%ARJName%" ( Здесь вставьте команды распаковки архива Echo Archive %ARJName% successfuly extracted ) Else ( Echo Waiting for ARJ in %ARJPath% Ping -n %Timeout% 127.0.0.1>nul GoTo WaitForARJ ) ) rem Уход на новую итерацию после таймаута Cls&Echo Scanning %ReadPath%... Ping -n %Timeout% 127.0.0.1>nul GoTo Loop |
Последний раз редактировалось Anonymоus, 21-05-2012 в 22:36. Отправлено: 22:25, 21-05-2012 | #4 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать огромное спасибо, все работает как швейцарские часики
p.s. сделал только пару изменений, ну и дописал команду распаковки архива 1. подготовка структуры директорий, не знаю грамотно я это или безграмотно сделал, слизал с кода ниже, главное работает большего и не надо rem Подготавливаем структуру директорий If Not Exist "%GetPath%" MD "%GetPath%" For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A rem Переименовываем обработанный файл, чтобы исключить повторное прочтение rem Если в системе установлен другой формат даты - исправить. For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%" и красота, все работает именно так как мне это и нужно, огромное человеческое спасибо |
|
Отправлено: 08:34, 22-05-2012 | #5 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать появилась проблемка, после вашего ответа в другой теме
в каком месте и что дописать в данном батнике, что бы запустить программу 01RKC#.exe после распаковки архива, если верить логике то перед частью которую я указал ниже, но возникает проблема, ПО не обращает внимание на весь остальной код, она в наглую берет и запускается даже если все остальное еще не выполнилось |
Отправлено: 12:30, 22-05-2012 | #6 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать Поспешил с вопросом, сам разобрался, еще раз спасибо огромное
|
Отправлено: 13:38, 22-05-2012 | #7 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать замечен небольшой глюк:
запускаю батник, находит файл, создает папку здесь C:\INFO все хорошо, оставил его работать, прихожу сегодня с утра, файл он нашел, но вод папку 2012.05.23 он сегодня не создал и соответственно файл "readDDMM.001" туда не переместил, и начал по кругу создавать файл get.txt. батник у меня вод такой получился @Echo Off rem Пути Set ReadPath=C:\INFO Set GetPath=C:\biki\get Set ARJPath=C:\BNK\IZM rem Таймаут проверки файлов, в секундах Set Timeout=10 Set /A Timeout+=1 If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1 rem Подготавливаем структуру директорий If Not Exist "%GetPath%" MD "%GetPath%" For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A ) :Loop Set ARJName=&Set NFOName= rem Поиск файла For /F "delims=" %%F In ('Dir "%ReadPath%\read*.*" /B') Do ( Set NFOName=%%F rem Поиск в найденном строки с архивом For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do ( rem Разбор строки на составляющие, вычленение имени архива For %%A In (%%S) Do ( Echo %%A|Find /I "arj">nul&&Set ARJName=%%A ) ) ) If Defined ARJName ( Echo Found %NFOName%, processing... rem Создаем get-файл Echo get mfo %ARJName%>"%GetPath%\get.txt" rem Переименовываем обработанный файл, чтобы исключить повторное прочтение rem Если в системе установлен другой формат даты - исправить. For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%" ) :WaitForARJ rem Распаковка архива, или ожидание, если он ещё не появился If Exist "%ARJPath%\%ARJName%" ( c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\ Echo Archive %ARJName% successfuly extracted ) Else ( Echo Waiting for ARJ in %ARJPath% Ping -n %Timeout% 127.0.0.1>nul GoTo WaitForARJ ) call 01RKC#.exe ) rem Уход на новую итерацию после таймаута Cls&Echo Scanning %ReadPath%... Ping -n %Timeout% 127.0.0.1>nul GoTo Loop |
Отправлено: 06:13, 23-05-2012 | #8 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Anufriev, директория с датой в этом батнике создается один раз, при запуске. А вы же его вчера запускали, верно? Дата сменилась, а директории нету, следовательно нужно проверять её наличие, и при необходимости создавать каждый раз, когда она будет востребована. Например, переносом проверки\создания в тот же цикл, который разбирает дату на составляющие и перемещает обработанный файл:
@Echo Off rem Пути Set ReadPath=C:\INFO Set GetPath=C:\biki\get Set ARJPath=C:\BNK\IZM rem Таймаут проверки файлов, в секундах Set Timeout=10 Set /A Timeout+=1 If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1 rem Подготавливаем структуру директорий If Not Exist "%GetPath%" MD "%GetPath%" :Loop Set ARJName=&Set NFOName= rem Поиск файла For /F "delims=" %%F In ('Dir "%ReadPath%\read*.*" /B') Do ( Set NFOName=%%F rem Поиск в найденном строки с архивом For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do ( rem Разбор строки на составляющие, вычленение имени архива For %%A In (%%S) Do ( Echo %%A|Find /I "arj">nul&&Set ARJName=%%A ) ) ) If Defined ARJName ( Echo Found %NFOName%, processing... rem Создаем get-файл Echo get mfo %ARJName%>"%GetPath%\get.txt" rem Перемещаем обработанный файл, чтобы исключить повторное прочтение rem Если в системе установлен другой формат даты - исправить. For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do ( If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A" Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%" ) :WaitForARJ rem Распаковка архива, или ожидание, если он ещё не появился If Exist "%ARJPath%\%ARJName%" ( c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\ Echo Archive %ARJName% successfuly extracted ) Else ( Echo Waiting for ARJ in %ARJPath% Ping -n %Timeout% 127.0.0.1>nul GoTo WaitForARJ ) call 01RKC#.exe ) rem Уход на новую итерацию после таймаута Cls&Echo Scanning %ReadPath%... Ping -n %Timeout% 127.0.0.1>nul GoTo Loop |
Отправлено: 07:13, 23-05-2012 | #9 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать спасибо, проверил методом изменения дат во время работы батника, теперь работает прекрасно!
эх... простите, за глупый вопрос, я понимаю что в другой теме вы ответили, что команда, при использовании nircmd, простая для передачи нажатия клавиш в окно, но у меня не получается это сделать, помогите, пожалуйста мне необходимо после запуска C:\BNK\01RKC#.EXE через 2 секунды нажать на клавишу I и еще через 2 секунды необходимо нажать два раза "Esc" |
Отправлено: 07:57, 23-05-2012 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Добавление параметра в текстовый файл равный названию файла | XXXp | Скриптовые языки администрирования Windows | 14 | 31-03-2012 23:56 | |
CMD/BAT - [решено] Вставить имя файла в текстовый файл (UTF-8 without BOM) | Jahnhoy | Скриптовые языки администрирования Windows | 11 | 19-09-2011 17:39 | |
CMD/BAT - [решено] как из bat файла дописать символ в текстовый файл? | idzs | Скриптовые языки администрирования Windows | 6 | 22-02-2011 03:49 | |
[решено] Можно ли создать текстовый файл внутри самой программы автоайти? | R.M.L | AutoIt | 7 | 03-10-2009 00:34 | |
Интерфейс - изменение стандартного предложения создать текстовый файл | Irekson | Microsoft Windows 2000/XP | 3 | 25-02-2008 10:26 |
|