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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] ПФР Не тревиальная задача- этот скрипт пригодится всем

Ответить
Настройки темы
CMD/BAT - [решено] ПФР Не тревиальная задача- этот скрипт пригодится всем

Новый участник


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

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


Ребят помогите плиз!!!!
Преамбула: Есть куча бухов - мы их все очень любим без них не получим свои кровные денюжки!
Задача: куча машин на каждой своя база по ПФР.
Я что б автоматизировать процесс написал скрипт(суть скрипта: Запустили - Он начинает скачку/Распаковывает/разархивирует/удаляет все временые файлы/Устанавливает) на все уходит примерно 3 минуты.
Итог: Пользователь счастлив У него все вовремя обнавлено. ГЛ.Бух счастлив -> Я и мой начальник счастлив!!!! Хепиэнд!!! НО тут есть собака которая порылась!
Сам скрипт:
@echo off
color 3E
title “бв**®ўЄ* Џ”ђ...
goto download

:Download
echo ‘Є*зЁў*Ґ¬ Џ”ђ...
c:\PFR\wget.exe http://www.pfrf.ru/userdata/branches...u_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" на Актуальную

Прошу помощи у Гуру программистов!!! Заранее спасибо за понимание!

Отправлено: 09:05, 11-11-2011

 

Новый участник


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

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


З.Ы. В принципе логику я понимаю: скрипт должен "чем то" воспользоваться - зайти на страницу/ сохранить код страницы в index.txt/ и уже потом а после запускаем скрипт по вытаскиванию URL/ сравниваем его с Оригиналом/ если отличается запихиваем его в строчку wget / дальше работает отстаток скрипта. Но вот как это сделать просто мне знаний не хватате, только учусь ... хех

З.Ы.Ы. Естественно для работы скрипта в папке существуют wget.exe \ unzip\ timeout.exe (мало ли на каких машинах будит запускаться)

Отправлено: 09:25, 11-11-2011 | #2



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

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


Ветеран


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

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


Под 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. Проверки на то, что приложение уже может быть установлено или запущено, равно как и проверки установленной версии — здесь не делается.
Цитата sergo123:
З.Ы.Ы. Естественно для работы скрипта в папке существуют wget.exe \ unzip\ timeout.exe (мало ли на каких машинах будит запускаться) »
Тогда правьте пути в:
Код: Выделить весь код
strWGetPath        = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\GnuWin32\bin\wget.exe")
str7ZipPath        = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\7-Zip\7z.exe")
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:25, 11-11-2011 | #3


Новый участник


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

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


Изображения
Тип файла: jpg Снимок экрана 2011-11-14 в 10.29.30.jpg
(204.2 Kb, 10 просмотров)
Тип файла: jpg Снимок экрана 2011-11-14 в 10.18.04.jpg
(203.0 Kb, 7 просмотров)

Цитата:
P.S. Проверки на то, что приложение уже может быть установлено или запущено, равно как и проверки установленной версии — здесь не делается.
Это и не надо так как ПФР пофиг есть или нет - базу данных он обновляет при запуске программы

Отправлено: 03:42, 14-11-2011 | #4


Ветеран


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

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


sergo123, сохранить с расширением *.vbs, исполнять под «cscript.exe»:
Код: Выделить весь код
cscript.exe //nologo "<Путь к сценарию>"
P.S. Выкладывать громадные скриншоты нет нужды: «Alt-PrintScreen» — копирует активное окно. В данном же случае, чтобы скопировать текст из окна MessageBox с сообщением об ошибке, достаточно нажать в нём «Ctrl-C».

Отправлено: 07:49, 14-11-2011 | #5


Новый участник


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

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


Работает!!!! Iska, Ты мего гуру!!!!!! Р.Е.С.П.Е.К.Т.!!!!!! И Уважуха!!! сейчас последний тест и все...

Отправлено: 08:10, 14-11-2011 | #6


Ветеран


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

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


sergo123, я сознательно не стал усложнять сей скрипт обработкой возможных ошибок (отсутствие проверки под каким движком скрипт запущен — тоже отсюда). Если скрипт в общем и целом у Вас заработал — насыщайте его потребными случаю проверками: на движок, на наличие связи с Internet, на существование файлов/папок, на проверку запущенного приложения и т.п.

Отправлено: 09:20, 14-11-2011 | #7


Новый участник


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

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


Iska, на проверку запущенного приложения и т.п. - это не надо так как машинки виртуальные и их запускают только когшда нужна необходимость - осталась самая сложная задача приучить Бухов "Тыкать в файлик" ))) Еще раз большущее спасибо!!!!

З.Ы. я с мака сижу через RDP - тут проще делаются скриншоты нажатием 3-х клавишь и скрин у тебя на раб столе - перепутал кропку получились на весь экран Хе-хе

Отправлено: 11:10, 14-11-2011 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] ПФР Не тревиальная задача- этот скрипт пригодится всем

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] скрипт проверяет файл по дате после запускает другой скрипт dot85 Скриптовые языки администрирования Windows 9 01-08-2011 14:22
C/C++ - C++ Задача SanchezArz Программирование и базы данных 5 20-11-2010 18:12
Delphi - Программа для подготовки сведений в ПФР tarakan1983 Программирование и базы данных 0 29-06-2010 19:10
Теория - Задача ManHack Программирование и базы данных 4 23-01-2009 18:21
Видео чат на Flash, Задача: найти flash-скрипт видео-чата Neu-iskatell Вебмастеру 2 10-11-2007 17:31




 
Переход