<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: информация о версии всех плагинов Total Commander]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=3422</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3422&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: информация о версии всех плагинов Total Commander».]]></description>
		<lastBuildDate>Thu, 16 Jul 2009 20:38:29 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBS: информация о версии всех плагинов Total Commander]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=26088#p26088</link>
			<description><![CDATA[<p>Когда то возникла необходимость вытащить subj , тогда и родился этот нехитрый скрипт.<br />Может кому пригодится...<br />Скрипт читает файл wincmd.ini сначала в папке %windir%, если его там нет то в папке запущенного Total Commander&#039;а, <br />регулярным выражением выбирает имена файлов-плагинов и собирает с них информацию при помощи objShellApp.NameSpace(folder).<br />Вся солянка наливается в Excel.</p><div class="codebox"><pre><code> 
&#039;проверка на один запуск
On Error Resume Next
Set objService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2&quot;)
If Err.Number &lt;&gt; 0 Then
    WScript.Echo Err.Number &amp; &quot;: &quot; &amp; Err.Description
    WScript.Quit
End If
QueryText = &quot;SELECT * FROM Win32_Process WHERE CommandLine LIKE &#039;%&quot; &amp; WScript.ScriptName &amp; &quot;%&#039;&quot;
Set colProc = objService.ExecQuery(QueryText)
If colProc.Count &gt; 1 Then
    WScript.Echo &quot;Скрипт уже запущен&quot;
    WScript.Quit
End If

Set objRegExp = CreateObject(&quot;VBScript.RegExp&quot;)
Set fso = CreateObject(&quot;scripting.filesystemobject&quot;)
set WshShell = CreateObject(&quot;wscript.Shell&quot;)
Set objShellApp = CreateObject(&quot;Shell.Application&quot;)
Set xlApp = CreateObject(&quot;Excel.Application&quot;) 
xlApp.Visible = True
xlApp.Workbooks.Add    
xlApp.Cells(1, 1).Value = &quot;FileName&quot;
xlApp.Cells(1, 2).Value = &quot;Description&quot;
xlApp.Cells(1, 3).Value = &quot;Version&quot;
xlApp.Cells(1, 4).Value = &quot;Version2&quot;

objRegExp.IgnoreCase = 1
objRegExp.Global = 1
&#039;проверяем запущенность Total Commander
On Error Resume Next
Set objService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2&quot;)
If Err.Number &lt;&gt; 0 Then
    WScript.Echo Err.Number &amp; &quot;: &quot; &amp; Err.Description
    WScript.Quit
End If
&#039;ищу в памяти Total ((TOTAL)|(WIN)) commander
objRegExp.Pattern = &quot;((TOTAL)|(WIN))CMD??.EXE&quot;
For Each objProc In objService.ExecQuery(&quot;SELECT * FROM Win32_Process&quot;)
    If objRegExp.Test(objProc.Caption) Then Exit For
Next

&#039;читаем wincmd.ini
objRegExp.Pattern=objProc.Caption
If Not fso.FileExists(WshShell.ExpandEnvironmentStrings(&quot;%WINDIR%&quot;)&amp;&quot;\wincmd.ini&quot;) Then
    Set fileFSO = fso.OpenTextFile(objRegExp.Replace(objProc.ExecutablePath,&quot;wincmd.ini&quot;))
Else
    Set fileFSO = fso.OpenTextFile(WshShell.ExpandEnvironmentStrings(&quot;%WINDIR%&quot;)&amp;&quot;\wincmd.ini&quot;)
End If

ini = fileFSO.ReadAll
&#039;если используется %COMMANDER_PATH% то подтигиваем %COMMANDER_PATH%=InstallDir
objRegExp.Pattern=&quot;%COMMANDER_PATH%.*&quot;
CommanderPath=&quot;&quot;
If objRegExp.Test(ini) Then
    objRegExp.Pattern=&quot;InstallDir=.*&quot;
    Set matches=objRegExp.Execute(ini)
    CommanderPath=Replace(matches(0).value,&quot;InstallDir=&quot;,&quot;&quot;)
    &#039;убираю перевод строки в конце
    CommanderPath=Left(CommanderPath,Len(CommanderPath)-1)
End If
&#039;выбираем плагины
objRegExp.Pattern=&quot;[-+~!#$%^&amp;()@:\s\\\w\%а-я]+\\plugins.*w.x&quot;
Set matches=objRegExp.Execute(ini)

i=2
&#039;находим plugins


For Each Match in matches      &#039; Iterate Matches collection.
    
    &#039;если есть переменные окружения выставляем их
    full_path=WshShell.ExpandEnvironmentStrings(Match.value)
    If CommanderPath&lt;&gt;&quot;&quot; Then full_path=Replace(full_path,&quot;%COMMANDER_PATH%&quot;,CommanderPath)
    &#039;имя папки
    objRegExp.Pattern=&quot;.*\\&quot;
    Set matches2=objRegExp.Execute(full_path)
        For Each Match2 in matches2      &#039; Iterate Matches collection.
            folder=Match2.value            
        Next
    &#039;имя файла
    objRegExp.Pattern=&quot;\w+\..*&quot;
    Set matches2=objRegExp.Execute(full_path)
        For Each Match2 in matches2      &#039; Iterate Matches collection.
            filename=Match2.value
        Next
        
    Set objFolder = objShellApp.NameSpace(folder)
    Set objItem = objFolder.ParseName(filename)
    
    xlApp.Cells(i, 1).Value = full_path
    &#039;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</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Alexey)]]></author>
			<pubDate>Thu, 16 Jul 2009 20:38:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=26088#p26088</guid>
		</item>
	</channel>
</rss>
