Pętla wsadowa używana do sprawdzania listy kluczy z pliku txt i ponownego wykorzystania wartości danych

1

Potrzebuję pętli wsadowej, która powinna wyodrębnić wartość danych i użyć jej w następnym poleceniu. Wszystkie klucze rejestru, które chcę wysłać, zostały zapisane w pliku * .txt.

Przykład:

Następujące polecenie zwróci wartość klucza, typ i dane zgodnie z poniższym opisem.

DOWÓDZTWO:

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\01690987922DC9549A63529D22383DDF\InstallProperties /V UninstallString

WYNIK:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\01690987922DC9549A63529D22383DDF\InstallProperties
    UninstallString    REG_EXPAND_SZ    MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD}

Chcę tylko wyodrębnić wartość danych MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD} i uruchom go jako moje następne polecenie w pętli for.

Mam około 20 kluczy rejestru, które chcę wysłać, a następnie uruchomić wyodrębnione polecenie. Chcę również dodać ciche przełączniki do komendy msiexec.exe, gdy zostanie ona wykonana.

Jestem bardzo nowy w pętlach wsadowych i wierzę, że muszę użyć tokeny / delims (?) ... nie jestem pewien, jak to działa.

Heinza
źródło
2
Czy potrzebujesz użyć języka cmd, czy możesz uaktualnić do bardziej zdolnego narzędzia (powershell, python, perl)?
Alien Life Form
Inne metody są OK. Używamy Windows ADK / MDT do nienadzorowanych instalacji systemu operacyjnego / aplikacji, a każda forma starszego pakietu powinna działać poprawnie. Uważam, że PowerShell będzie najlepszym rozwiązaniem, jeśli weźmie się pod uwagę moich kolegów.
Heinza
@AlienLifeForm cmd jest doskonale zdolny do tak trywialnego zadania;)
DavidPostill
@ AlienLifeForm Mam również cygwin. Po prostu nie udało mi się nauczyć PowerShell.
DavidPostill

Odpowiedzi:

1

reg query lista kluczy z pliku txt i ponowne wykorzystanie wartości danych

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\01690987922DC9549A63529D22383DDF\InstallProperties /V UninstallString

Chcę tylko wyodrębnić wartości danych MsiExec.exe i /X{78909610-D229-459C-A936-25D92283D3FD} i uruchom go jako moje następne polecenie w for pętla.

Następujący plik wsadowy powinien zostać uruchomiony:

@echo off
setlocal enableDelayedExpansion
rem get each key from keys.txt
for /f "usebackq tokens=*" %%i in (`type keys.txt`) do (
  echo Processing key %%i
  rem skip the first line and grab tokens 3 and 4 from the second line
  for /f "usebackq skip=1 tokens=3,4" %%j in (`reg query %%i`) do (
    echo %%j /quiet %%k
    )
  )

Uwagi:

  • keys.txt powinien zawierać klucze do zapytania, po jednym w wierszu.
  • Potrzebujesz dwóch for pętle, pierwsza przetwarza każdy klucz, druga (wewnętrzna) analizuje wynik.
  • Pomijamy pierwszą linię wyjścia, ponieważ jest to nazwa klucza.
  • Usunąć echo z echo %%j /quiet %%k kiedy jesteś zadowolony z tego, co robi plik wsadowy.
  • Zakładam /quiet to przełącznik, którego potrzebujesz do „cichego”. Zmień w razie potrzeby.

Dalsze czytanie

DavidPostill
źródło