Показать полную графическую версию : автоматическое обновление справочников Биков ПО 01RKC#.exe
Anufriev
23-05-2012, 14:02
Всем кто помогал, большое спасибо, задача выполнена, я ликую:)
taskkill /IM ntvdm.exe »
Боюсь, рано или поздно, принудительные снятия процесса, работающего с *.dbf-базами, аукнутся.
Anufriev
23-05-2012, 14:17
я думаю что необходимо сделать ожидание побольше, корректировки там не большие проходят, так что надеюсь будет успевать все корректироваться до того как завершится процесс
конечно можно поискать вариант с более щедящим завершением работ ПО
и не понадобилось стороннее ПО, что очень радует.
Получился вод такой код
@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
Переделал.
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
этот бекап баз делается после обновления тоеть в конце всего процесса
возможно ли по завершению батника отправить сообщение не определенный ПК?
Anonymоus
23-05-2012, 15:28
Anufriev, попробуйте net send (net send /? для синтаксиса) или заменитель (http://www.winsent.ru/rus/sent/).
@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
возможно ли по завершению батника отправить сообщение не определенный ПК? »
Лучше:
msg.exe /server:…
Anufriev
24-05-2012, 06:26
net send в win7 не имеется, стороннее ПО ставить не хочется
вопрос а как работает msg, сам себе получается отправить на другой ПК не удается "Ошибка 1722 при получении имен сеанса"
необходимо в реестре изменить HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC=1
Anufriev
24-05-2012, 07:52
консоль приходится запускать от имени доменного админа с ПК на ПК которые в домене отправляется
а как тогда отправить с ПК который не в домене, на ПК который в домене:( (создается впечатление, что ему не хватает прав для отправки сообщения)
p.s. russur, ты какой то странный;)
Anufriev
24-05-2012, 11:35
есть вариант конечно отправлять файлик на шару и на ПК сканировать эту шару, при появлении файла выдавать сообщение о том что обновление выполнено
Anonymоus
24-05-2012, 12:28
Или, если у вас в организации разрешено использование jabber'а - можно вот этим ruby-скриптом (http://habrahabr.ru/blogs/ruby/137505/) отсылать уведомления.
UPD: А ссылка-то и не работает. Залил сохранившийся у меня инсталлер на обменник: http://rghost.ru/38254678
Anufriev
24-05-2012, 12:32
проблемка:(
Доступ к публикации закрыт
Вы пытаетесь открыть публикацию, написанную пользователем Zloy1.
Автор переместил топик в черновики.
Anufriev
24-05-2012, 12:53
а не расскажете как им пользоваться?:(
Anonymоus
24-05-2012, 13:31
Расскажу. Там есть файл 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
что то не удается мне отправить:(, сообщение не доходит, пользуюсь корпоративным сервером
ввожу команду:
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
Я же вам пример файла настроек привел. Сервер указывается один раз, в 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
ошибок не выдает, но сообщения не доходят:( странно как то
p.s. первый раз я слал именно с такими настройками, тоже не шло, потом решил попробовать указать полный JID
Anonymоus
25-05-2012, 08:38
Хм, тогда не подскажу в чем может быть проблема, у меня с приведенными настройками работает с серверами neko.im, 2ch.so, jabber.ru и qip.ru. В то же самое время, на jabber.jp не отправляет. Предположу, что проблема может быть в программном обеспечении, используемом самим сервером.
Как вариант, посылать уведомления предложенным вами способом, через шару во внутренней сети, ну или отправлять уведомления на почту, через BLAT (http://www.blat.net/) или аналоги.
Anufriev
25-05-2012, 08:45
думаю пойду другим путём, загоню тот ПК в домен, и буду полноценно пользоваться командой msg
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.