OE PowerTool 4.5.5
Twój adres IP to: 18.97.14.91
Przeglądarka: CCBot/2.0 (https://commoncrawl.org/faq/)
@echo off
for /f "Tokens=*" %%i in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall') do (
for /f "Tokens=3*" %%j in ('reg query "%%i" /v displayname 2^>nul') do (
if not %%j==VERSION echo %%j %%k
)
)
Kilka słów wyjaśnienia. Skrypt korzysta z programu reg.exe. Jest on domyślnie w Windows XP. W Windows 2000 należy go sobie doinstalować z Resource Kit. Najpierw pobieramy listę podkluczy z klucza HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall wywołując reg.exe z opcją query. Każdy podklucz oznacza jeden program. Linijki zawierające nazwy tych podkluczy są po kolei w pętli podstawiane do zmiennej i. "Tokens=*" sprawia, że do zmiennej trafia wszystko, a nie tylko znaki znajdujące się przed pierwszą spacją w nazwie podklucza. Przy każdym przejściu pętli głównej druga pętla for próbuje odczytać dane zapisane w wartości DisplayName w podkluczu wskazanym w zmiennej i przez pętlę główną. Potem analizuje zwrócony tekst. Tekst ten zawiera nie tylko odczytane dane ale też linijki zaczynające się od VERSION. Za pomocą if odfiltrowujemy je i zostawiamy tylko te, które zawierają nazwę programu odczytaną z wartości DisplayName. Pozostaje jeszcze kwestia zmiennych j i k. Otóż w linijce z nazwą programu są na początku dwa wyrazy, które są nam niepotrzebne (nazwa wartości i typ). Dlatego za pomocą "Tokens=3*" informujemy pętlę for, że interesuje nas trzeci wyraz i następne. Trzeci wyraz trafia do zmiennej j, co widać w skrypcie. Reszta linijki trafia do zmiennej k, czego już nie widać. Dzieje się to automatycznie - dane wstawiane są do zmiennej, która jest następna w alfabecie po zmiennej wskazanej w pętli for. Na koniec tajemnicza instrukcja 2^>nul. Zapobiega ona wyświetlaniu błędów w przypadku nieobecności wartości DisplayName kierując strumień błędów do urządzenia pustego nul.