Wyświetlanie zainstalowanych programów w skrypcie wiersza polecenia

   Poniżej zamieszczam prosty skrypt shellowy pozwalający wyświetlić listę zainstalowanych programów:
@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.
   W powyższym przykładzie pokazałem jak użyć pętli for do analizowania tego, co wyświetlają programy konsolowe. Pamiętajmy, że pętlą for możemy też analizować zawartość pliku, zawartość folderu (listę plików i katalogów), przetwarzać kolejne wartości (jak w klasycznej pętli for) oraz wykonywać akcje na wskazanym zbiorze plików (np. *.exe). Szczegółowe informacje znajdują się w pomocy systemowej.