Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe

Ответить
Настройки темы
CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe

Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Anufriev
Дата: 25-05-2012
Описание: решение перенес в шапку
Вложения
Тип файла: rar read1804.rar
(352 байт, 19 просмотров)
добрый день!

необходимо создать батник, который делает такое

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
шестой пункт решается этим способом предложенным Iska

Цитата:
сделайте копии файла «config.nt», расположенного в папке «system32» Вашей папки «Windows», и файла «config.fp», расположенного в папке с приложением. Затем поменяйте в обоих вышеупомянутых файлах строку:
Код: Выделить весь код
FILES=40
на:
Код: Выделить весь код
FILES=200
Спасибо за помощь!

Отправлено: 15:07, 21-05-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Anufriev:
но мне сказали что VBS не умеет работать с текстом »
Вам солгали.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:08, 21-05-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


в таком случае я был бы очень благодарен, если бы мне помогли в написании этого скрипта

Отправлено: 18:23, 21-05-2012 | #3


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить 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
2. файл мне переименовывать не нужно было, а нужно было перемещать в папку с сегодняшней датой

Код: Выделить весь код
rem Переименовываем обработанный файл, чтобы исключить повторное прочтение
rem Если в системе установлен другой формат даты - исправить.
    For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
        Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%"
3. ну и команда arj

Код: Выделить весь код
c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\
и красота, все работает именно так как мне это и нужно, огромное человеческое спасибо

Отправлено: 08:34, 22-05-2012 | #5


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


появилась проблемка, после вашего ответа в другой теме

в каком месте и что дописать в данном батнике, что бы запустить программу 01RKC#.exe после распаковки архива, если верить логике то перед частью которую я указал ниже, но возникает проблема, ПО не обращает внимание на весь остальной код, она в наглую берет и запускается даже если все остальное еще не выполнилось

Код: Выделить весь код
rem Уход на новую итерацию после таймаута
Cls&Echo Scanning %ReadPath%...
Ping -n %Timeout% 127.0.0.1>nul
GoTo Loop

Отправлено: 12:30, 22-05-2012 | #6


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


Поспешил с вопросом, сам разобрался, еще раз спасибо огромное

Отправлено: 13:38, 22-05-2012 | #7


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить 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
Благодарности: 257

Профиль | Отправить 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
Кстати, если 01RKC#.exe вызывается только после распаковки архива, то логичнее бы было перенести запуск этой программы в то самое условие, в котором архив и распаковывается. Например, сразу после строки "Echo Archive %ARJName% successfuly extracted"
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:13, 23-05-2012 | #9


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


спасибо, проверил методом изменения дат во время работы батника, теперь работает прекрасно!

эх... простите, за глупый вопрос, я понимаю что в другой теме вы ответили, что команда, при использовании nircmd, простая для передачи нажатия клавиш в окно, но у меня не получается это сделать, помогите, пожалуйста

мне необходимо после запуска C:\BNK\01RKC#.EXE через 2 секунды нажать на клавишу I и еще через 2 секунды необходимо нажать два раза "Esc"

Отправлено: 07:57, 23-05-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход