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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Определение версии файла (http://forum.oszone.net/showthread.php?t=178270)

cause 15-06-2010 22:01 1434852

Определение версии файла
 
Добрый день!
Прошу вашей помощи.

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

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

amel27 16-06-2010 03:54 1434989

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 1436655

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

amel27 18-06-2010 12:29 1436681

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 1438417

Большое спасибо!

batyaPS 04-09-2012 20:52 1983057

подскажите как поправить кусок 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 1983074

получилось скопировать вот так:


Код:

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 1983160

batyaPS, поясните подробнее Вашу хотелку, учитывая, что не у всех есть 1Cv8.

batyaPS 05-09-2012 09:53 1983340

Цитата:

Цитата Iska
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 1983525

Цитата:

Цитата batyaPS
да просто нужно объявить переменную скажем %ver1c% вместо %FileVersion% которая так же будет выводить версию файла, »

Зачем? Какая разница?

Цитата:

Цитата batyaPS
дальше в скрипте можно было её использовать и не пересекать с другими задачами. »

Не пересекайте:
Код:

setlocal /?
endlocal /?


batyaPS 05-09-2012 17:57 1983661

Цитата:

Цитата Iska
endlocal /? »

я понял, что это команда отключает ранее созданные переменные, но как в данном случае скомандовать на отключение переменной %FileVersion%

Iska 06-09-2012 04:35 1983922

«setlocal» — до, и «endlocal» — после.

HORiSi 09-03-2022 15:27 2981335

Народ, а как получить версию файла в Интернете без собственно закачки файла?


Время: 19:14.

Время: 19:14.
© OSzone.net 2001-