OE PowerTool 4.5.5
Twój adres IP to: 3.236.100.210
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
.