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.