Тема: VBS: информация о версии всех плагинов Total Commander
Когда то возникла необходимость вытащить subj , тогда и родился этот нехитрый скрипт.
Может кому пригодится...
Скрипт читает файл wincmd.ini сначала в папке %windir%, если его там нет то в папке запущенного Total Commander'а,
регулярным выражением выбирает имена файлов-плагинов и собирает с них информацию при помощи objShellApp.NameSpace(folder).
Вся солянка наливается в Excel.
'проверка на один запуск
On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
QueryText = "SELECT * FROM Win32_Process WHERE CommandLine LIKE '%" & WScript.ScriptName & "%'"
Set colProc = objService.ExecQuery(QueryText)
If colProc.Count > 1 Then
WScript.Echo "Скрипт уже запущен"
WScript.Quit
End If
Set objRegExp = CreateObject("VBScript.RegExp")
Set fso = CreateObject("scripting.filesystemobject")
set WshShell = CreateObject("wscript.Shell")
Set objShellApp = CreateObject("Shell.Application")
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Add
xlApp.Cells(1, 1).Value = "FileName"
xlApp.Cells(1, 2).Value = "Description"
xlApp.Cells(1, 3).Value = "Version"
xlApp.Cells(1, 4).Value = "Version2"
objRegExp.IgnoreCase = 1
objRegExp.Global = 1
'проверяем запущенность Total Commander
On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
'ищу в памяти Total ((TOTAL)|(WIN)) commander
objRegExp.Pattern = "((TOTAL)|(WIN))CMD??.EXE"
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process")
If objRegExp.Test(objProc.Caption) Then Exit For
Next
'читаем wincmd.ini
objRegExp.Pattern=objProc.Caption
If Not fso.FileExists(WshShell.ExpandEnvironmentStrings("%WINDIR%")&"\wincmd.ini") Then
Set fileFSO = fso.OpenTextFile(objRegExp.Replace(objProc.ExecutablePath,"wincmd.ini"))
Else
Set fileFSO = fso.OpenTextFile(WshShell.ExpandEnvironmentStrings("%WINDIR%")&"\wincmd.ini")
End If
ini = fileFSO.ReadAll
'если используется %COMMANDER_PATH% то подтигиваем %COMMANDER_PATH%=InstallDir
objRegExp.Pattern="%COMMANDER_PATH%.*"
CommanderPath=""
If objRegExp.Test(ini) Then
objRegExp.Pattern="InstallDir=.*"
Set matches=objRegExp.Execute(ini)
CommanderPath=Replace(matches(0).value,"InstallDir=","")
'убираю перевод строки в конце
CommanderPath=Left(CommanderPath,Len(CommanderPath)-1)
End If
'выбираем плагины
objRegExp.Pattern="[-+~!#$%^&()@:\s\\\w\%а-я]+\\plugins.*w.x"
Set matches=objRegExp.Execute(ini)
i=2
'находим plugins
For Each Match in matches ' Iterate Matches collection.
'если есть переменные окружения выставляем их
full_path=WshShell.ExpandEnvironmentStrings(Match.value)
If CommanderPath<>"" Then full_path=Replace(full_path,"%COMMANDER_PATH%",CommanderPath)
'имя папки
objRegExp.Pattern=".*\\"
Set matches2=objRegExp.Execute(full_path)
For Each Match2 in matches2 ' Iterate Matches collection.
folder=Match2.value
Next
'имя файла
objRegExp.Pattern="\w+\..*"
Set matches2=objRegExp.Execute(full_path)
For Each Match2 in matches2 ' Iterate Matches collection.
filename=Match2.value
Next
Set objFolder = objShellApp.NameSpace(folder)
Set objItem = objFolder.ParseName(filename)
xlApp.Cells(i, 1).Value = full_path
'xlApp.Cells(i, 2).Value = filename
xlApp.Cells(i, 2).Value = objFolder.GetDetailsOf(objItem, 37)
xlApp.Cells(i, 3).Value = objFolder.GetDetailsOf(objItem, 38)
xlApp.Cells(i, 4).Value = objFolder.GetDetailsOf(objItem, 40)
i=i+1
Next
WScript.Quit