1 votes

Boucle de lot utilisée pour interroger une liste de clés à partir d'un fichier txt et réutiliser la valeur des données.

J'ai besoin d'une boucle batch qui devrait extraire une valeur de données et l'utiliser dans sa prochaine commande. Toutes les clés de registre que je veux interroger ont été enregistrées dans un fichier *.txt.

Exemple :

La commande suivante renverra la valeur de la clé, le type et les données comme indiqué ci-dessous.

COMMANDE :

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

RÉSULTAT :

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}

Ce que je veux faire est extraire uniquement la valeur de données MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD} et l'exécuter en tant que ma prochaine commande dans la boucle for.

J'ai environ 20 clés de registre que je veux interroger, puis exécuter la commande extraite. Je veux également ajouter des commutateurs silencieux à la commande msiexec.exe lorsqu'elle est exécutée.

Je suis très novice en ce qui concerne les boucles batch et je crois avoir besoin d'utiliser des jetons / delims(?)... je ne suis pas vraiment sûr de comment le faire fonctionner.

1voto

DavidPostill Points 140654

reg query une liste de clés à partir d'un fichier txt et réutiliser les valeurs de données

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

Ce que je veux faire, c'est extraire uniquement les valeurs de données MsiExec.exe et /X{78909610-D229-459C-A936-25D92283D3FD} et l'exécuter comme ma prochaine commande dans la boucle for.

Le fichier batch suivant devrait vous aider à démarrer :

@echo off
setlocal enableDelayedExpansion
rem obtenir chaque clé de keys.txt
for /f "usebackq tokens=*" %%i in (`type keys.txt`) do (
  echo Traitement de la clé %%i
  rem sauter la première ligne et récupérer les jetons 3 et 4 de la deuxième ligne
  for /f "usebackq skip=1 tokens=3,4" %%j in (`reg query %%i`) do (
    echo %%j /quiet %%k
    )
  )

Notes :

  • keys.txt devrait contenir les clés à interroger, une par ligne.
  • Vous avez besoin de deux boucles for, la première pour traiter chaque clé, la deuxième (interne) pour analyser la sortie.
  • Nous sautons la première ligne de la sortie car c'est le nom de la clé.
  • Supprimez le echo de echo %%j /quiet %%k lorsque vous êtes satisfait de ce que fait le fichier batch.
  • Je suppose que /quiet est le commutateur dont vous avez besoin pour "silencieux". Modifiez selon les besoins.

Lecture supplémentaire

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X