× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > 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 poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
60 €Abonnement un an de Deezer Premium + carte fnac+ à 60 €
Valable jusqu'au 01 Juin

Fnac fait une promotion sur l'abonnement un an de Deezer Premium qui passe à 60 € au lieu de 99 €. Deezer Premium vous permet d'écouter toute votre musique en illimité, sans publicité, même sans réseau. La carte Fnac+ vous est également offerte (livraison gratuite et illimitée, caisse prioritaire en magasin, ....)


> Voir l'offre
18,90 €Microsoft Office 2019 Professional Plus à 18,90 €
Valable jusqu'au 05 Juin

Le vendeur sérieux Digital FR propose sur Amazon la clé d'activation légale pour Microsoft Office Professionnel 2019 Plus en français à 18,90 €. Cette clé livrée par email vous permettra d'activer Microsoft Office Professionnel 2019 Plus légalement et vous permettra ainsi d'utiliser autant de temps que vous voulez (il s'agit de la version complète et pas d'un abonnement) Word,Excel, PowerPoint, OneNote, Outlook, Publisher et Access 2019 sur un PC. La clé sera à activer sur Office.com où vous pourrez ensuite télécharger toute la suite bureautique. Pour mémoire, Microsoft Office Professionnel 2019 nécessite Windows 10. Sous Windows 7 ou 8, vous devrez vous tourner vers la version 2016. Pour plus d'info sur la procédure, n'hésitez pas à jeter un oeil à notre dossier pratique Acheter une clé OEM d'Office 2019 et l'installer.


> Voir l'offre
26,99 €Clé USB 3.0 et Micro USB Sandisk Ultra OTG 128 Go à 26,99 €
Valable jusqu'au 03 Juin

Amazon fait une promotion la nouvelle version de la clé USB 3.0 SanDisk Dual Drive 128 Go qui passe à 26,99 € livrée gratuitement. La particularité de cette clé USB réside dans le fait qu'elle dispose à la fois d'un connecteur USB pour la brancher sur votre ordinateur ou votre TV, mais également d'un connecteur micro USB pour la brancher sur votre smartphone ou votre tablette. Compatible USB 3.0 (et 2.0), cette clé USB offre des débits jusqu'à 150 Mo/s. 


> 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