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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   автоматическое обновление справочников Биков ПО 01RKC#.exe (http://forum.oszone.net/showthread.php?t=235103)

Anufriev 21-05-2012 15:07 1919893

автоматическое обновление справочников Биков ПО 01RKC#.exe
 
Вложений: 1
добрый день!

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

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

Спасибо за помощь!

Iska 21-05-2012 16:08 1919927

Цитата:

Цитата Anufriev
но мне сказали что VBS не умеет работать с текстом »

Вам солгали.

Anufriev 21-05-2012 18:23 1920007

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

Anonymоus 21-05-2012 22:25 1920083

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


Anufriev 22-05-2012 08:34 1920208

огромное спасибо, все работает как швейцарские часики

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\
и красота, все работает именно так как мне это и нужно, огромное человеческое спасибо:)

Anufriev 22-05-2012 12:30 1920314

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

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

Код:

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


Anufriev 22-05-2012 13:38 1920350

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

Anufriev 23-05-2012 06:13 1920832

замечен небольшой глюк:

запускаю батник, находит файл, создает папку здесь 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


Anonymоus 23-05-2012 07:13 1920841

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"

Anufriev 23-05-2012 07:57 1920852

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

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

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

Anonymоus 23-05-2012 08:11 1920859

"Справочник БИК" у меня не установлен, поэтому проверить код не на чем, так что попробуйте у себя вот это:
Код:

@Echo Off
:: Запускаем программу
Start "" "C:\BNK\01RKC#.EXE"
:: Ждём две секунды
Ping -n 3 127.0.0.1>nul
:: Делаем окно программы активным (по заголовку окна, поменяйте на реальный заголовок)
Nircmdc win focus ititle "Заголовок"
:: Посылаем нажатие 'I'
Nircmdc sendkeypress I
:: Ещё раз ждём две секунды
Ping -n 3 127.0.0.1>nul
:: Посылаем двойное нажатие 'ESC'
Nircmdc sendkeypress esc esc


Iska 23-05-2012 09:21 1920896

Anonymоus, а почему не ждёте самим NirCmd? Там аж целых две возможности, как «wait», так и более удобная в нашем случае «cmdwait».

Anufriev 23-05-2012 09:24 1920897

Вложений: 1
судя по всему, должно с вот этим заголовком "ntvdm*" все работать, сейчас на скриншоте заголовок "ntvdm-ed8.444.35c" где ntvdm - постоянная, -ed8.444.35c - постоянно меняется, но почему то не работает:(

Anonymоus 23-05-2012 09:44 1920912

Iska, как-то из головы вылетела такая возможность. Вы правы, раз уж nircmd используется, глупо не сделать паузу через него.

Anufriev, немного поправил, проверьте вот этот скрипт
Код:

@Echo Off
:: Запускаем программу
Start "" "C:\BNK\01RKC#.EXE"
:: Ждём две секунды и делаем окно программы активным
Nircmdc cmdwait 2000 win activate stitle "ntvdm"
:: Посылаем нажатие 'I'
Nircmdc sendkeypress I
:: Ещё раз ждём две секунды и посылаем двойное нажатие 'ESC'
Nircmdc cmdwait 2000 sendkeypress esc esc


Anufriev 23-05-2012 09:58 1920923

так, активным окно делается, а вот нажатие клавиш не передается

Iska 23-05-2012 10:01 1920928

«Too many fies open» — не проще ли настроить количество доступных для подсистемы файлов? Anufriev, дайте прямую ссылку на «01RKC#.EXE», откуда его можно загрузить.

Anufriev 23-05-2012 10:08 1920932

прошу

но сообщение ignore выскакивает только в случае обновления

Iska 23-05-2012 12:58 1920993

Anufriev, сделайте копии файла «config.nt», расположенного в папке «system32» Вашей папки «Windows», и файла «config.fp», расположенного в папке с приложением.

Затем поменяйте в обоих вышеупомянутых файлах строку:
Код:

FILES=40
на:
Код:

FILES=200
Перезагрузите машину (на всякий случай, я не помню, требуется ли сие реально) и попробуйте обновить — появится ли вновь ошибка «Too many fies open»?

Anufriev 23-05-2012 13:42 1921013

прекрасно, ошибка больше не выскакивает

осталась теперь последняя проблемка, это необходимость закрыть программу, а для этого необходимо двойное нажатие "esc"

p.s. перезагрузка не потребовалась!

можно сделать вод так

Код:

taskkill /IM ntvdm.exe

Iska 23-05-2012 14:00 1921021

Цитата:

Цитата Anufriev
p.s. перезагрузка не потребовалась! »

Спасибо, ясно.

Anufriev 23-05-2012 14:02 1921023

Всем кто помогал, большое спасибо, задача выполнена, я ликую:)

Iska 23-05-2012 14:08 1921026

Цитата:

Цитата Anufriev
Код:

taskkill /IM ntvdm.exe
»

Боюсь, рано или поздно, принудительные снятия процесса, работающего с *.dbf-базами, аукнутся.

Anufriev 23-05-2012 14:17 1921040

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

конечно можно поискать вариант с более щедящим завершением работ ПО

и не понадобилось стороннее ПО, что очень радует.
Получился вод такой код

Код:

@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
start C:\DAT.vbs
    ) 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

p.s. думаю теперь лучше скрипт vbs переделать на bat и вообще красота будет, простите Iska, лишний скриптик писали:((хотя он не лишний, очень хороший, и выручал пока не разобрались с батником), подскажете как его на bat переделать, ну и дописать в тот общий батник

Код:

Option Explicit


Dim dtCurrDate
Dim strFormattingDate

dtCurrDate = Now()
strFormattingDate = Right("0000" & Year(dtCurrDate), 4) & "." & Right("00" & Month(dtCurrDate), 2) & "." & Right("00" & Day(dtCurrDate), 2)

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FolderExists("Y:\DAT") Then
                If .FolderExists("C:\bnk") Then
                        If Not .FolderExists("Y:\" & strFormattingDate) Then
                                .GetFolder("Y:\DAT").Name = strFormattingDate
                                .CopyFolder "C:\bnk\DAT", "Y:\DAT", True
                        Else
                                WScript.Echo "Folder [Y:\" & strFormattingDate & "] already exists"
                        End If
                Else
                        WScript.Echo "Folder [C:\bnk] not found"
                End If
        Else
                WScript.Echo "Folder [Y:\DAT] not found"
        End If
End With

WScript.Quit 0


Anonymоus 23-05-2012 15:18 1921069

Переделал.
Код:

For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
    If Not Exist "D:\%%C.%%B.%%A" (
        Ren "D:\DAT" "%%C.%%B.%%A" 2>nul||MD "D:\%%C.%%B.%%A"
        Xcopy "C:\BNK\DAT" "D:\DAT" /E /I /Y /Q
    )
)

Это ежедневный бэкап баз? В каком месте основного скрипта он должен вызываться?

Anufriev 23-05-2012 15:19 1921071

этот бекап баз делается после обновления тоеть в конце всего процесса

возможно ли по завершению батника отправить сообщение не определенный ПК?

Anonymоus 23-05-2012 15:28 1921074

Anufriev, попробуйте net send (net send /? для синтаксиса) или заменитель.

Код:

@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 "D:\DAT" "%%C.%%B.%%A" 2>nul||MD "D:\%%C.%%B.%%A"
                Xcopy "C:\BNK\DAT" "D:\DAT" /E /I /Y /Q
            )
        )
rem Отсылаем уведомление
        Net send ADMIN "Created backup D:\%%C.%%B.%%A"
    ) 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 23-05-2012 16:43 1921129

Цитата:

Цитата Anufriev
возможно ли по завершению батника отправить сообщение не определенный ПК? »

Лучше:
Код:

msg.exe /server:…

Anufriev 24-05-2012 06:26 1921478

net send в win7 не имеется, стороннее ПО ставить не хочется
вопрос а как работает msg, сам себе получается отправить на другой ПК не удается "Ошибка 1722 при получении имен сеанса"

необходимо в реестре изменить HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC=1

russur 24-05-2012 07:26 1921489

оффтоп

Anufriev 24-05-2012 07:52 1921495

консоль приходится запускать от имени доменного админа с ПК на ПК которые в домене отправляется

а как тогда отправить с ПК который не в домене, на ПК который в домене:( (создается впечатление, что ему не хватает прав для отправки сообщения)

p.s. russur, ты какой то странный;)

Anufriev 24-05-2012 11:35 1921622

есть вариант конечно отправлять файлик на шару и на ПК сканировать эту шару, при появлении файла выдавать сообщение о том что обновление выполнено

Anonymоus 24-05-2012 12:28 1921658

Или, если у вас в организации разрешено использование jabber'а - можно вот этим ruby-скриптом отсылать уведомления.
UPD: А ссылка-то и не работает. Залил сохранившийся у меня инсталлер на обменник: http://rghost.ru/38254678

Anufriev 24-05-2012 12:32 1921663

проблемка:(

Доступ к публикации закрыт

Вы пытаетесь открыть публикацию, написанную пользователем Zloy1.

Автор переместил топик в черновики.

Anufriev 24-05-2012 12:53 1921675

а не расскажете как им пользоваться?:(

Anonymоus 24-05-2012 13:31 1921696

Расскажу. Там есть файл xmpp_sender.yml, это профиль из которого берутся настройки по умолчанию (любую из них можно позже поменять при вызове из батника), там обычно хранится пароль и прочее. Он имеет вот такой вид:
Код:

# Be patient - don't use <Tab> for indentation, it's not permited in YAML
# To indent use spaces only
xmpp_sender:
  server: 2ch.so
  login: jabberbot
  password: *******
  to: inquisitor
  subject: Test message
  body:

И получатель, и отправитель должны находиться на одном и том же сервере. У меня, как это видно из настроек, 2ch.so. Работает с jabber.ru, qip.ru, любым яндексовским сервером. Login - аккаунт отправителя, password - пароль к нему. to - получатель сообщения, тот аккаунт, куда будете слать уведомления. subject и body можно оставить пустыми, мы их задаем при вызове из батника, но если сообщение будете слать всего одно - можно и прямо сюда вписать.
Сама отправка сообщения вызывается вот так:
Код:

xmpp_sender -b "Update succesfuly installed at %Date% %Time:~-0,8%">nul
Это отправит вам сообщение об обновлении с датой и временем.
Использовать кириллицу в теле сообщения можно только при условии, что батник сохранён в UTF-8 без BOM. В случае использования другой кодировки, сообщение придет в битой кодировке.

Anufriev 25-05-2012 06:29 1922164

что то не удается мне отправить:(, сообщение не доходит, пользуюсь корпоративным сервером
ввожу команду:
C:\Windows\system32>"C:\Program Files (x86)\Xmpp Sender\xmpp_sender.exe" -b "Update succesfuly installed at %Date% %Time:~-0,8%"

выдает вот это:

working directory: C:/Program Files (x86)/Xmpp Sender/
@server: jabber.abp.local
@login: anufriev_a@jabber.abp.local
@password: *****
@to: tarabaev_d@jabber.abp.local
@subject: test
@body: Update succesfuly installed at 25.05.2012 9:26:58
C:/Program Files (x86)/Xmpp Sender/lib/ruby/gems/1.8/gems/xmpp4r-0.5/lib/xmpp4r/jid.rb:126:in `domain': undefined method `empty?' for nil:NilClass (NoMethodError)
from C:/Program Files (x86)/Xmpp Sender/lib/ruby/gems/1.8/gems/xmpp4r-0.5/lib/xmpp4r/client.rb:70:in `connect'
from C:/Program Files (x86)/Xmpp Sender/src/xmpp_sender.rb:38:in `send'
from C:/Program Files (x86)/Xmpp Sender/src/xmpp_sender.rb:162

Anonymоus 25-05-2012 06:42 1922165

Я же вам пример файла настроек привел. Сервер указывается один раз, в server:, поэтому указание полного JID'а абсолютно не требуется, и более того, приводит к ошибкам. В вашем случае содержимое файла настроек xmpp_sender.yml должно выглядеть как-то так:

Код:

xmpp_sender:
  server: jabber.abp.local
  login: anufriev_a
  password: *****
  to: tarabaev_d
  subject: test
  body:

Попробуйте выполнить ту же команду с такими настройками.

Anufriev 25-05-2012 07:17 1922167

ошибок не выдает, но сообщения не доходят:( странно как то

p.s. первый раз я слал именно с такими настройками, тоже не шло, потом решил попробовать указать полный JID

Anonymоus 25-05-2012 08:38 1922188

Хм, тогда не подскажу в чем может быть проблема, у меня с приведенными настройками работает с серверами neko.im, 2ch.so, jabber.ru и qip.ru. В то же самое время, на jabber.jp не отправляет. Предположу, что проблема может быть в программном обеспечении, используемом самим сервером.

Как вариант, посылать уведомления предложенным вами способом, через шару во внутренней сети, ну или отправлять уведомления на почту, через BLAT или аналоги.

Anufriev 25-05-2012 08:45 1922189

думаю пойду другим путём, загоню тот ПК в домен, и буду полноценно пользоваться командой msg

ameelien 23-07-2013 15:12 2189219

c:\Program Files (x86)\Xmpp Sender>xmpp_sender.exe
working directory: c:/Program Files (x86)/Xmpp Sender/
@server: domain-xmpp.ya.ru
@login: term@cmy.ru
@password: DUB
@to: term@cmy.ru
@subject: Test message prtg
@body: Hey Zloy, I tried xmpp sender too. Best wishes!
c:/Program Files (x86)/Xmpp Sender/lib/ruby/gems/1.8/gems/xmpp4r-0.5/lib/xmpp4r/jid.rb:126:in `domain': undefined method
`empty?' for nil:NilClass (NoMethodError)
from c:/Program Files (x86)/Xmpp Sender/lib/ruby/gems/1.8/gems/xmpp4r-0.5/lib/xmpp4r/client.rb:70:in `connect'
from c:/Program Files (x86)/Xmpp Sender/src/xmpp_sender.rb:38:in `send'
from c:/Program Files (x86)/Xmpp Sender/src/xmpp_sender.rb:162



Вот на том и паримся.
Прошу обратить внимание!
Мне надо именно в логине указывать домен, потому что на сервере их тысячи, если не больше.


Будьте добры, помогите разобраться в этом глюке. Бесценно будет для людей эта утилита.
OS: win 2008r2 x64

ameelien 23-07-2013 15:32 2189231

Протестировал даже без полного логина с доменом, на jabber.ru - сообщения не доходят....
Помогите кто ни будь, сделать эту утилиту, пожалуйста.

ameelien 23-07-2013 17:00 2189288

так, трабл почему не доходили сообщения нашёлся - надо оказывается было предварительно другу другу в контакт лист добавится.... Но, трабл с логин@домен - не решён.. тут нужно человека понимающего руби...


Время: 12:01.

Время: 12:01.
© OSzone.net 2001-