> Tous les forums > Forum Windows 7
 Demande d'aide pour un script batch DOS
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
ribotb
  Posté le 15/09/2013 @ 11:54 
Aller en bas de la page 
Petit astucien

Bonjour,

Le batch se compose de deux commandes :

- un reg query pour récupérer dans un fichier toutes les clés "Uninstall" de la base de registres,

- une commande FOR pour traiter ce fichier et créer un autre fichier contenant une partie des informations : dans le fichier issu du reg query j'ai des groupes de la forme :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FCB10DE3-E190-4A7E-B06A-FAC61567ABFC}
AuthorizedCDFPrefix REG_SZ
Comments REG_SZ
Contact REG_SZ
DisplayVersion REG_SZ 5.0.17
[...]
Language REG_DWORD 0x409
DisplayName REG_SZ MySQL Tools for 5.0

Et dans le fichier de sortie, pour chaque groupe, je voudrais obtenir une ligne de la forme :

{FCB10DE3-E190-4A7E-B06A-FAC61567ABFC} MySQL Tools for 5.0

C'est-à-dire : nom_de_la_clé valeur_de_DisplayName.

Voici le batch :

@echo off
If Exist %Temp%\DisplayName.txt ERASE %Temp%\DisplayName.txt
If Exist %Temp%\UninstallKeys.txt ERASE %Temp%\UninstallKeys.txt
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" > %Temp%\UninstallKeys.txt /s
FOR /F "eol=; tokens=1,3* delims= " %%A in (%Temp%\UninstallKeys.txt) do (
echo 1: %%A 3: %%B 3*: %%C
IF "%%A:~1,4"=="HKEY" set $UninstallKey=%%A:~71
If "%%A"=="DisplayName" (set $DisplayName=%%C
echo %$UninstallKey% %$DisplayName% >> %Temp%\DisplayName.txt
)

Le problème c'est que je ne récupère rien dans les variables $UninstallKey et ùDisplayName !

Et ce que je comprends encore moins c'est que j'ai un autre batch qui ressemble un peu à celui-ci (il récupère la valeur de InstallLocation pour une clé Uninstall particulière) et qui fonctionne :

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DocFetcher" > %Temp%\DocFetcherInstallLocation.txt
FOR /F "tokens=1-5 delims= " %%A in (%Temp%\DocFetcherInstallLocation.txt) do (
If "%%A"=="InstallLocation" set $DocFetcherInstallLocation=%%C %%D %%E
)

Merci de votre aide.

Bernard

Publicité
olivier2013
 Posté le 15/09/2013 à 16:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut,

essaie dans le script qui marche avec "%%A:~1"=="InstallLocation" pour voir si cela ne vient pas de ça.

A+

Constance
 Posté le 15/09/2013 à 16:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Yo .o/

Je pense que le /s dans la commande reg query devrait être avant la redirection.

Edit : Ha ben nan, j'ai rien dit, ça n'a pas l'air d'avoir d'influence... m'enfin ce serait quand même plus propre pour la relecture, je pense :hmm:



Modifié par Constance le 15/09/2013 16:50
olivier2013
 Posté le 15/09/2013 à 16:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Si passe pas essaie avec ça

"%%A:~1%%"=="InstallLocation" pour voir si cela ne vient pas de ça.

A+

Constance
 Posté le 15/09/2013 à 17:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bon, sinon j'ai une autre solution, excepté qu'elle nécessite que l'exécutable externe sed et ses dépendances soient accessibles par le PATH sur la machine exécutant le script : voir ici.

ribotb
 Posté le 17/09/2013 à 15:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Bonjour, Je viens de m'apercevoir tout à fait par hasard qu'il y avait des réponses. Je n'ai pas eu de mails d'alerte. Je lis tout ça et je reviens vous voir. Bernard
ribotb
 Posté le 17/09/2013 à 17:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

essaie dans le script qui marche avec "%%A:~1"=="InstallLocation"

Eh ben, y marche plus

Si passe pas essaie avec ça

"%%A:~1%%"=="InstallLocation"

Pas mieux comme ça...

Mais il semble qu'on ait une piste : le découpage du paramètre remplacable de la commande FOR (en l'occurrence %%A) pose problème.

@Constance : J'ai jeté un coup d'oeil au script. À première vue ça ressemble à ce que je veux faire. S'il s'avère que je ne peux pas découper ma variable %%A je me plongerais dans cet exemple. Il faut que je vois de plus près comment s'installe et s'utilise l'instruction sed.

Bernard

ribotb
 Posté le 17/09/2013 à 19:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Constance a écrit :

Bon, sinon j'ai une autre solution, excepté qu'elle nécessite que l'exécutable externe sed et ses dépendances soient accessibles par le PATH sur la machine exécutant le script : voir ici.

J'ai récupéré le script.

J'ai récupéré sed.exe (je l'ai mis dan le même dossier que le script, je verrai après les tests pour lui trouver un emplacement définitif, et si nécessaire le déclarer dans la variable PATH).

Je n'ai pas utilisé les dépendances, apparemment sed.exe fonctionne sans (enfin... pour le script qui nous intéresse).

J'ai lancé le script tel quel, sans changer une virgule.

Malgré une flopée de messages d'erreur (notamment à chaque REG QUERY), bizarrement le script fonctionne, sauf un petit truc ... : alors que le fichier liste.tmp se présente bien, le fichier final (après suppression de la chaîne HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\ sur chaque ligne du fichier tmp) n'a plus de sauts de ligne (un petit truc à voir dans le sed).

J'envoie des captures par "plis séparés", mon message était trop gros !

Bernard

ribotb
 Posté le 17/09/2013 à 19:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Les messages d'erreur :

et plus loin :


Publicité
ribotb
 Posté le 17/09/2013 à 19:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Le fichier final (début) :

Ce srait bien mieux comme ça :

Le fichier tmp :

Bernard

Constance
 Posté le 17/09/2013 à 20:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Re ^^

Hmm ben chez moi il donne un listing final correct du point de vue des sauts de ligne, c'est peut-être justement parce que tu n'as pas pris les dépendances que ça merdouille ?

Ceci dit j'ai moi aussi pas mal de messages d'erreur... je vais y jeter un œil.

Edit : je pense que ligne 11 il vaudrait mieux encadrer %%a avec des guillemets dans la commande REG QUERY (pour éviter le coup de la syntaxe incorrecte).
Les autres messages d'erreur sont liés au fait qu'il n'y a pas systématiquement de valeur DisplayName associée à une de ces clefs.



Modifié par Constance le 17/09/2013 20:27
ribotb
 Posté le 17/09/2013 à 23:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

J'ai récupéré les dépendances ici (fichier sed-4.2.1-dep.zip qui contient libint3.dll, regex2.dll et libconv2.dll) mais l'anomalie demeure dans le fichier final.

J'ai aussi encadré la variable %%a comme tu le suggérais et ça a effectivement éliminé les problèmes de syntaxe. Il reste juste les messages causés par l'absence de la sous-clé DisplayName (une vongtaine) :

Bernard

ribotb
 Posté le 18/09/2013 à 13:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Pour être certain que sed.exe et ses dépendances étaient correctement installés j'ai téléchargé et exécuté le package d'installation sed-4.2.1-setup.exe mais le résultat final est identique.

Bernard

ribotb
 Posté le 18/09/2013 à 15:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Constance a écrit :

Hmm ben chez moi il donne un listing final correct du point de vue des sauts de ligne, c'est peut-être justement parce que tu n'as pas pris les dépendances que ça merdouille ?

J'ai remplacé l'instruction :

TYPE "%temp%\liste.tmp" | sed s/.*\\Uninstall\\// > %Sortie%

par :

FOR /F "delims=\ tokens=7*" %%c in (%temp%\liste.tmp) do (
echo %%c >> %Sortie%
)

C'est moins élégant mais ça fonctionne.

Il y a un cas qui n'est pas prévu par le script, c'est quand le type de DisplayName est REG_EXPAND_SZ. Ca donne ça :

{7299052b-02a4-4627-81f2-1818da5d550d} Microsoft Visual C++ 2005 Redistributable
{79D5997E-BF79-48BB-8B41-9BE59C15C2D7} DisplayName REG_EXPAND_SZ OmniPage SE 2.0
{7F95A744-78DA-4AED-A8F0-A0AF330B8411}_is1 Video to Video

C'est le seul cas sur 293 clés ! On se demande pourquoi ScanSoft a fait comme ça ! Je ne sais pas si on peut prévoir ça dans le sed qui recherche REG_SZ ? Comme c'est un cas unique j'ai rectifié à la mano.

En tout cas, merci infiniment pour ton script.

Bernard

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
139,99 €Alimentation modulaire Corsair RM750X 80+ Gold à 139,99 €
Valable jusqu'au 20 Janvier

Amazon propose actuellement l'alimentation modulaire Corsair RM750X à 139,99 € livrée gratuitement. Cette alimentation de 750W est certifiée 80+ Gold et est garantie 10 ans. Entièrement modulaire, vous pourrez brancher uniquement les câbles (fournis) dont vous avez besoin. On la trouve ailleurs à partir de 170 €. 


> Voir l'offre
294,96 €Mini PC T-BAO TBOOK MN27 (Ryzen 7 2700U, 16Go RAM, 512Go SSD NVME) à 294,96 € avec le code BGSPTB27
Valable jusqu'au 20 Janvier

Banggood propose actuellement le mini PC T-BAO TBOOK MN27 à 294,96 € (avec livraison et assurance comprises) avec le code promo BGSPTB27. Ce mini PC au format NUC d'Intel possède un processeur Ryzen 7 2700U avec chip graphique Vega 10, 16 Go de RAM DDR4 et un SSD NVME de 512 Go. Il dispose d'une connectique complète : un emplacement 2,5 pouces libre (pour ajouter un disque dur ou un SSD supplémentaire, le WiFi5, le bluetooth 4.1, 4 ports USB 3.0, 2 ports USB 2.0, un port HDMI 2.0, un DisplayPort, un port Ethernet Gigabit et tourne sous Windows 10 que vous pourrez mettre en français. Ce mini PC fait 12,8 x 12,8 x 5 cm et pèse 1,2 kg. Il est livré avec une alimentation européenne. Branchez ce mini PC sur une TV ou un écran et vous avez un ordinateur discret et performant.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une vingtaine de jours. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre
12,90 €Windows 10 Pro 32/64 bits OEM à 12,90 €
Valable jusqu'au 19 Janvier

Le vendeur sérieux Digital FR propose sur Amazon la clé d'activation pour Windows 10 professionnel en français 32 bits / 64 bits à 12,90 €. Cette clé livrée par email fonctionne avec l'outil d'installation et de création de support de Microsoft que vous pouvez télécharger ici ou directement avec l'ISO de Windows 10 Pro. De quoi installer légalement Windows 10 Pro sur un PC. Pour en savoir plus sur l'achat et l'installation d'une clé OEM de Windows 10, suivez les indications de notre dossier pratique.


> Voir l'offre

Sujets relatifs
AIde pour realiser Un batch de deplacement conditionnel de fichier
Aide à l'ecriture d'un fichier batch ou script de deplacement de fichier.
Demande d'aide pour créer une partition en +
Rapports pour aide à l'optimisation
Java et java script pour Windows 7
Réintallation Windows 7 - Aide pour résoudre un problème
Aide pour rapport Whocrashed suite nombreux Bluescreen
[RAID1] Demande d'aide sur ma configuration
Aide pour fichier .bat
Besoin d'aide pour un diagnostic panne
Plus de sujets relatifs à Demande d''aide pour un script batch DOS
 > Tous les forums > Forum Windows 7