Показать полную графическую версию : [решено] ПФР Не тревиальная задача- этот скрипт пригодится всем
sergo123
11-11-2011, 09:05
Ребят помогите плиз!!!!
Преамбула: Есть куча бухов - мы их все очень любим без них не получим свои кровные денюжки!
Задача: куча машин на каждой своя база по ПФР.
Я что б автоматизировать процесс написал скрипт(суть скрипта: Запустили - Он начинает скачку/Распаковывает/разархивирует/удаляет все временые файлы/Устанавливает) на все уходит примерно 3 минуты.
Итог: Пользователь счастлив У него все вовремя обнавлено. ГЛ.Бух счастлив -> Я и мой начальник счастлив!!!! Хепиэнд!!! НО тут есть собака которая порылась!
Сам скрипт:
@echo off
color 3E
title “бв**®ўЄ* Џ”ђ...
goto download
:Download
echo ‘Є*зЁў*Ґ¬ Џ”ђ...
c:\PFR\wget.exe http://www.pfrf.ru/userdata/branches/ot_orenb/program/Setup_Spu_orb_1_68.zip -c -t
goto loop
:rar
echo.
echo ђ*§®аеЁўЁа㥬 Џ”ђ...
C:\PFR\unzip.exe -u C:\PFR\Setup_Spu_orb_1_68.zip
goto wait
:loop
echo.
echo †¤Ґ¬ 5 ¬Ё*гв...
timeout /T 5
goto rar
:wait
echo.
echo †¤Ґ¬ 5 ¬Ё*гв...
timeout /T 5
goto setup
:setup
echo.
echo “бв***ў«Ёў*Ґ¬ Џ”ђ...
C:\PFR\Setup_Spu_orb.exe /S /R100
echo.
echo “бв**®ўЄ* §*ўҐаиҐ**! ¬®¦ЁвҐ ЁбЇ®«м§®ў*вм Џа®Ја*¬¬г Џ”ђ. ‘Ї*бЁЎ®.
Exit
Теперь сама проблема: Все бы нечего если б ПФР не привязал бы свой файлик к версиям! "Setup_Spu_orb_1_68.zip"
Помощь зала:
Нашел способ и нашел часть нужного мне скрипта:
Большое Спасибо "Anonymоus"
"...Вот этот скрипт распарсит html-файл и выделит всё, что находится внутри a href="ссылка", производится проверка на расширение файла по ссылке. К сожалению, обойтись без использования одного временного файла не получилось. В данном примере ссылки выводятся Echo, вы уже сами перенаправьте их, куда нужно...."
@Echo Off
Set File=index.txt
SetLocal EnableDelayedExpansion
For /F "tokens=*" %%A In ('sed "s/.*href=.//" %File%') Do (Echo %%A>>tmp)
For /F "tokens=*" %%A In ('sed "s/.>.*$//" tmp') Do (
Set String=%%A
If /I "!String:~-4!"==".exe" Echo %%A
)
Del tmp
Pause>nul
То что я немогу никак допетрить (сломал мозГ) как с помощью CMD запустить Браузер что б он зашел по этому адресу "http://www.pfrf.ru/index.php?chapter_id=4116&data_id=6075&do=view_single" скопировал бы его в index.txt а уже после этого как создаться этот файлик с данными я запущу скрипт выше по вытаскиванию URL. Останется только в *.Bat - нике заменить все URL и заменить срточку с "Setup_Spu_orb_1_68.zip" на Актуальную
Прошу помощи у Гуру программистов!!! Заранее спасибо за понимание!
sergo123
11-11-2011, 09:25
З.Ы. В принципе логику я понимаю: скрипт должен "чем то" воспользоваться - зайти на страницу/ сохранить код страницы в index.txt/ и уже потом а после запускаем скрипт по вытаскиванию URL/ сравниваем его с Оригиналом/ если отличается запихиваем его в строчку wget / дальше работает отстаток скрипта. Но вот как это сделать просто мне знаний не хватате, только учусь ... хех
З.Ы.Ы. Естественно для работы скрипта в папке существуют wget.exe \ unzip\ timeout.exe (мало ли на каких машинах будит запускаться)
Под WSH:
Option Explicit
Dim objFSO
Dim objWshShell
Dim strWGetPath
Dim str7ZipPath
Dim strUrl
Dim strOriginalCharset
Dim strUrlFilePattern
Dim objHTMLDocument
Dim objHTMLAnchorElement
Dim strUrlFile
Dim boolFound
Dim strWorkFolder
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
strUrl = "http://www.pfrf.ru/index.php?chapter_id=4116&data_id=6075&do=view_single"
strOriginalCharset = "windows-1251"
strUrlFilePattern = "http://www\.pfrf\.ru/userdata/branches/ot_orenb/program/Setup_Spu_orb_[\d_]*\.zip"
strWGetPath = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\GnuWin32\bin\wget.exe")
str7ZipPath = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\7-Zip\7z.exe")
Set objHTMLDocument = GetDocumentFromURL(strUrl, strOriginalCharset)
With WScript.CreateObject("VBScript.RegExp")
.Global = False
.IgnoreCase = True
.Pattern = strUrlFilePattern
WScript.StdOut.Write "Searching in: " & strUrl & "..."
boolFound = False
For Each objHTMLAnchorElement In objHTMLDocument.links
If .Test(objHTMLAnchorElement.href) Then
strUrlFile = objHTMLAnchorElement.href
boolFound = True
Exit For
End If
Next
End With
If boolFound Then
WScript.StdOut.WriteLine " OK"
WScript.StdOut.Write "Downloading: " & strUrlFile & "..."
If objWshShell.Run( _
"""" & strWGetPath & """ " & _
"--progress=dot:binary --tries=10 --timestamping " & _
"--directory-prefix=""" & objWshShell.ExpandEnvironmentStrings("%Temp%") & """ " & _
"""" & strUrlFile & """", 1, True) = 0 Then
WScript.StdOut.WriteLine " OK"
WScript.StdOut.Write "Extracting: " & objFSO.GetFileName(strUrlFile) & "..."
strWorkFolder = GetTemporaryName()
If objWshShell.Run( _
"""" & str7ZipPath & """ " & _
" x -o""" & strWorkFolder & """ -aoa """ & _
objFSO.BuildPath(objWshShell.ExpandEnvironmentStrings("%Temp%"), objFSO.GetFileName(strUrlFile)) & """ ""*""", 1, True) = 0 Then
WScript.StdOut.WriteLine " OK"
WScript.StdOut.Write "Installing: " & "Setup_Spu_orb.exe" & "..."
If objWshShell.Run( _
"""" & objFSO.BuildPath(strWorkFolder, "Setup_Spu_orb.exe") & """ /S /R100", 1, True) = 0 Then
WScript.StdOut.WriteLine " OK"
Else
WScript.StdOut.WriteLine " Error"
End If
objFSO.DeleteFolder strWorkFolder, True
Else
WScript.StdOut.WriteLine " Error"
End If
Else
WScript.StdOut.WriteLine " Error"
End If
Else
WScript.StdOut.WriteLine " Error"
End If
Set objWshShell = Nothing
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function GetDocumentFromURL(strURL, strCharset)
Const adModeReadWrite = 3
Const adTypeBinary = 1
Const adTypeText = 2
Dim objHTMLDocument
Dim objHTMLBaseElement
Dim arrHtmlText
Dim strUrlDomain
Dim strContent
Set objHTMLDocument = WScript.CreateObject("HTMLFile")
With WScript.CreateObject("VBScript.RegExp")
.Pattern = "^(http://.*?/).*"
strUrlDomain = .Execute(strUrl).Item(0).SubMatches(0)
End With
With WScript.CreateObject("MSXML2.XMLHTTP")
.open "GET", strURL, False
.send
arrHtmlText = .responseBody
End With
With WScript.CreateObject("ADODB.Stream")
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write arrHtmlText
.Position = 0
.Type = adTypeText
.Charset = strCharset
strContent = Replace(.ReadText, "<head>", "<head><base href=""" & strUrlDomain & """>", 1, -1, vbTextCompare)
With WScript.CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "(<script[^>]*)"
objHTMLDocument.open
objHTMLDocument.write .Replace(strContent, "<script type='text/plain'")
objHTMLDocument.close
End With
End With
Set GetDocumentFromURL = objHTMLDocument
Set objHTMLDocument = Nothing
End Function
'=============================================================================
'=============================================================================
' Серый форум / VBScript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
Const TemporaryFolder = 2
Dim strTempName
With WScript.CreateObject("Scripting.FileSystemObject")
Do
strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
End With
GetTemporaryName = strTempName
End Function
'=============================================================================
P.S. Проверки на то, что приложение уже может быть установлено или запущено, равно как и проверки установленной версии — здесь не делается.
З.Ы.Ы. Естественно для работы скрипта в папке существуют wget.exe \ unzip\ timeout.exe (мало ли на каких машинах будит запускаться) »
Тогда правьте пути в:
strWGetPath = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\GnuWin32\bin\wget.exe")
str7ZipPath = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\7-Zip\7z.exe")
sergo123
14-11-2011, 03:42
P.S. Проверки на то, что приложение уже может быть установлено или запущено, равно как и проверки установленной версии — здесь не делается.
Это и не надо так как ПФР пофиг есть или нет - базу данных он обновляет при запуске программы
sergo123, сохранить с расширением *.vbs, исполнять под «cscript.exe»:
cscript.exe //nologo "<Путь к сценарию>"
P.S. Выкладывать громадные скриншоты нет нужды: «Alt-PrintScreen» — копирует активное окно. В данном же случае, чтобы скопировать текст из окна MessageBox с сообщением об ошибке, достаточно нажать в нём «Ctrl-C».
sergo123
14-11-2011, 08:10
Работает!!!! Iska, Ты мего гуру!!!!!! Р.Е.С.П.Е.К.Т.!!!!!! И Уважуха!!! сейчас последний тест и все...
sergo123, я сознательно не стал усложнять сей скрипт обработкой возможных ошибок (отсутствие проверки под каким движком скрипт запущен (http://forum.oszone.net/post-1794582.html#post1794582) — тоже отсюда). Если скрипт в общем и целом у Вас заработал — насыщайте его потребными случаю проверками: на движок, на наличие связи с Internet, на существование файлов/папок, на проверку запущенного приложения и т.п.
sergo123
14-11-2011, 11:10
Iska, на проверку запущенного приложения и т.п. - это не надо так как машинки виртуальные и их запускают только когшда нужна необходимость - осталась самая сложная задача приучить Бухов "Тыкать в файлик" :)))) Еще раз большущее спасибо!!!!
З.Ы. я с мака сижу через RDP - тут проще делаются скриншоты нажатием 3-х клавишь и скрин у тебя на раб столе - перепутал кропку получились на весь экран Хе-хе
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.