Войти

Показать полную графическую версию : [решено] Определение версии файла


cause
15-06-2010, 22:01
Добрый день!
Прошу вашей помощи.

Необходимо добавить в существующий скрипт при входе в винду след. функцию:

Проверяется файл по пути с:\\хх\х.ехе
Если файл не существует то шлем письмо админу "файл не найден"
Если его версия не равна 1.1 то шлем письмо админу "версии не совпадают"

amel27
16-06-2010, 03:54
cause, примерно так, выделенные значения необходимо заменить на свои:
Set WS = CreateObject("WScript.Shell")
Set FSO= CreateObject("Scripting.FileSystemObject")
sCompName = WS.ExpandEnvironmentStrings("%ComputerName%")
sUserName = WS.ExpandEnvironmentStrings("%UserName%")

sFile = "с:\хх\х.ехе"
sTo = "adm@srv.com"
sFrom = "monitor@srv.com"
sSubj = "Monitor: "& sUserName &" ["& sCompName &"]"

If FSO.FileExists(sFile) Then
If FSO.GetFileVersion(sFile) <> "1.1" Then
SendMail sTo, sFrom, sSubj, "версии не совпадают"
End If
Else
SendMail sTo, sFrom, sSubj,"файл не найден"
End If

Sub SendMail(sTo, sFrom, sSubj, sText)
Dim oEmail:Const sCfg = "http://schemas.microsoft.com/cdo/configuration/"
Set oEmail = CreateObject("CDO.Message")

oEmail.Configuration.Fields.Item(sCfg &"smtpserver") = "smtp.dom.local"
oEmail.Configuration.Fields.Item(sCfg &"sendusername") = "monitor"
oEmail.Configuration.Fields.Item(sCfg &"sendpassword") = "password"
oEmail.Configuration.Fields.Item(sCfg &"smtpserverport") = 25
oEmail.Configuration.Fields.Item(sCfg &"smtpauthenticate")= cdoBasic
oEmail.Configuration.Fields.Item(sCfg &"sendusing") = 2
oEmail.Configuration.Fields.Update

oEmail.To = sTo :oEmail.From = sFrom
oEmail.Subject = sSubj:oEmail.Textbody= sText

oEmail.Send
End Sub

cause
18-06-2010, 12:06
Спасибо работает!
Еще 2 вопросика
1. А если надо определить имеет ли файл заданный размер Например файл должен иметь размер 255 байт?
2. Если надо проверять файл по пути используя стандартные виндовские среды то это должно выглядеть так:
sFile = "%SYSTEMROOT%\хх\х.ехе"
sFile = "%program files%\хх\х.ехе"

amel27
18-06-2010, 12:29
1.If FSO.FileExists(sFile) Then
If FSO.GetFileVersion(sFile) <> "1.1" Then
SendMail sTo, sFrom, sSubj, "версии не совпадают"
End If
If FSO.GetFile(sFile).Size <> 255 Then
SendMail sTo, sFrom, sSubj, "размер не совпадает"
End If
Else
SendMail sTo, sFrom, sSubj,"файл не найден"
End If
2.sFile = WS.ExpandEnvironmentStrings("%SystemRoot%")& "\хх\х.ехе"
sFile = WS.ExpandEnvironmentStrings("%ProgramFiles%")& "\хх\х.ехе"

cause
21-06-2010, 09:58
Большое спасибо!

batyaPS
04-09-2012, 20:52
подскажите как поправить кусок cmd скрипта что бы
во второй и третьей строчке получить версию файла

FOR /F "tokens=1* usebackq" %%a IN (`""filever.exe" /V "%programfiles%\1cv82\common\1cestart.exe" | FIND "FileVersion""`) DO SET ver1c=%%a
xcopy \\s680000file\all\1c\namedecl.dll "%programfiles%\1cv82\ver1c\bin\" /y
regsvr32 /s "%programfiles%\1cv82\ver1c\bin\namedecl.dll"

batyaPS
04-09-2012, 21:10
получилось скопировать вот так:


for /f "tokens=1,2 delims= " %%i in ('filever.exe /v "%programfiles%\1cv82\common\1cestart.exe"^|find.exe /i "FileVersion"') do set %%i=%%j
xcopy \\s680000file\all\1c\namedecl.dll "%programfiles%\1cv82\%FileVersion%\bin\" /y
regsvr32 /s "%programfiles%\1cv82\%FileVersion%\bin\namedecl.dll"

но как поменять переменную FileVersion скажем на ver1c , что бы избежать в дальнейшем при выполнении скрипта проблем ?

Iska
04-09-2012, 22:41
batyaPS, поясните подробнее Вашу хотелку, учитывая, что не у всех есть 1Cv8.

batyaPS
05-09-2012, 09:53
batyaPS, поясните подробнее Вашу хотелку, учитывая, что не у всех есть 1Cv8. »
да просто нужно объявить переменную скажем %ver1c% вместо %FileVersion% которая так же будет выводить версию файла, что дальше в скрипте можно было её использовать и не пересекать с другими задачами.

т.е. мне надо что бы строка regsvr32 /s "%programfiles%\1cv82\%FileVersion%\bin\namedecl.dll"
работа вот так regsvr32 /s "%programfiles%\1cv82\%ver1c%\bin\namedecl.dll"

Iska
05-09-2012, 14:41
да просто нужно объявить переменную скажем %ver1c% вместо %FileVersion% которая так же будет выводить версию файла, »
Зачем? Какая разница?

дальше в скрипте можно было её использовать и не пересекать с другими задачами. »
Не пересекайте:
setlocal /?
endlocal /?

batyaPS
05-09-2012, 17:57
endlocal /? »
я понял, что это команда отключает ранее созданные переменные, но как в данном случае скомандовать на отключение переменной %FileVersion%

Iska
06-09-2012, 04:35
«setlocal» — до, и «endlocal» — после.

HORiSi
09-03-2022, 15:27
Народ, а как получить версию файла в Интернете без собственно закачки файла?




© OSzone.net 2001-2012