Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
## SCRIPT DE Récup/Edit/Comparaison
Auteur Message
Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Bonjour a tous !

Déja pour vous situer, je suis un grand débutant en Batch mais j'en ai besoin pour un projet.

Grosso modo, j'ai besoin d'extraire la liste complète des logciels sous windows / Linux / MACOS. Même si ici je ne traiterai que la partie DOS.

I. Récupération des listes applicatives.

Pour récupérer mes logiciels installés sur windows, j'utilise la commande wmic avec product get name,version.

PROBLEME : ça ne récupère clairement pas toute la liste applicative ... Donc je pars déja sur une base a moitié complète ce que me dérange un peu.

QUESTION :Connaissez vous un moyen de récupérer la totalité des programes en Batch ?

II. Traitement de la donnée.

Grosso modo ici je récupère mes données d'application en Nom/Version et j'aimerai tout transformer en un Csv propre, sachant que l'export en .Csv ne le fait pas proprement.

J’obtiens par exemple le ficher softexport.txt suivant : attention l'éditeur de texte enleve les espaces mais il y en a une bonne 20ene entre les deux lignes (ici un seul espace visible)

Name Version
Microsoft Application Error Reporting 12.0.6012.5000
Microsoft Office Professional Plus 2010 14.0.7015.1000
Microsoft Office OneNote MUI (French) 2010 14.0.7015.1000
Microsoft Office InfoPath MUI (French) 2010 14.0.7015.1000
Microsoft Office Visio MUI (English) 2010 14.0.7015.1000
Microsoft Office Access MUI (French) 2010 14.0.7015.1000
Microsoft Office Shared Setup Metadata MUI (English) 2010 14.0.7015.1000
Microsoft Office Excel MUI (French) 2010 14.0.7015.1000
Microsoft Office Shared 64-bit Setup Metadata MUI (English) 2010 14.0.7015.1000
Microsoft Office PowerPoint MUI (French) 2010 14.0.7015.1000

J'aimerai traiter tout le document en sortant de la manière suivante :

Name; Version
Microsoft Application Error Reporting;12.0.6012.5000
Microsoft Office Professional Plus 2010;14.0.7015.1000
Microsoft Office OneNote MUI (French) 2010;14.0.7015.1000
Microsoft Office InfoPath MUI (French) 2010;14.0.7015.1000
Microsoft Office Visio MUI (English) 2010;14.0.7015.1000
Microsoft Office Access MUI (French) 2010;14.0.7015.1000
Microsoft Office Shared Setup Metadata MUI (English) 2010;14.0.7015.1000
Microsoft Office Excel MUI (French) 2010;14.0.7015.1000
Microsoft Office Shared 64-bit Setup Metadata MUI (English) 2010;14.0.7015.1000
Microsoft Office PowerPoint MUI (French) 2010;14.0.7015.1000

Pour ca j'ai voulu utiliser le script suivant : (honteusement pompé sur internet)

for /f "delims=" %%a in (fichier1.txt "%1"') do call :commande "%%a"
goto :eof
:commande
set ligne=%1
set ligne=%ligne: =%
@echo %ligne% >>fichier2.txt

Sauf que quand je l’exécute, il plante sur la variable %%a me disant qu'elle n'était pas attendu, je ne comprends pas trop...

III. Pour la partie traitement de la donnée, je verrai peut être ca quand j'aurai réussi avancer sur les deux premier aspects ^^'


Je m'en remets a vous après 1 semaine de recherche sur le sujet. Si vous avez des idées, des suggestions ou des pistes, je suis grand demandeur de savoir et d’expérimentation !! Mr. Green Mr. Green

En vous remerciant par avant pour votre aide Wink



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Salut salmodes, déjà tu devrais passer te présenter >> ICI << Wink

Pour récupérer la liste des softs installés sur pc, perso j'utilise un vieux code de batch-man:
Code:

@ECHO OFF

:: La première boucle permet de lister toutes les sous-clés de la clé "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
:: La deuxième boucle lit dans chaque sous clés trouvées précédemment le contenu de la valeur DisplayName
:: La valeur DisplayName contient le nom du programme qui à installé cette clé
:: Chaque programme à sa propre clé.

FOR /F "TOKENS=*" %%A IN ('"REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"') DO (
     FOR /F "TOKENS=2,*" %%I IN ('REG QUERY "%%A" ^| FIND /I "DisplayName"') DO ECHO %%J)
     
PAUSE


Ici on récupère donc Le DisplayName mais tu peux récupérer les valeurs dont tu as besoin en ajoutant un reg query parmi la liste dispo:


Exemple en ajoutant la version et l'éditeur, avec un fichier de sortie formaté en csv:

Code:

@echo off
setlocal enabledelayedexpansion
set ExportFile=softexport.txt

for /F "tokens=*" %%A in ('"REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"') DO (
     for /f "tokens=2,*" %%A in ('REG QUERY "%%A" ^| find /i "DisplayName"') do set DisplayName=%%B
     for /f "tokens=2,*" %%C in ('REG QUERY "%%A" ^| find /i "DisplayVersion"') do set DisplayVersion=%%D
    for /f "tokens=2,*" %%E in ('REG QUERY "%%A" ^| find /i "Publisher"') do set Publisher=%%F
    echo !DisplayName!;!DisplayVersion!;!Publisher! >> %ExportFile%
    )
pause


On peut le faire aussi avec wmic si jamais tu n'as pas toutes les infos dont tu as besoin.
Ici même principe, tu fais un get sur l'objet que tu veux et tu concatène directement avec les points virgules qui vont bien Wink

Et oui ton code google ne fera pas l'affaire Mort de Rire
(comme disait mon maître de stage: "on peut tout copier sur le net, mais à condition de comprendre ce qu'on copie, donc commence par apprendre p'tit con" Mr. Green




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Un grand merci a toi !!

Oui je suis en train de me faire un petit cours de btach depuis 7 h ce matin Mort de Rire

Et je vais aller me présenter de ce pas ! Okay



Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
salmodes a écrit:
Un grand merci a toi !!

Je t'en prie on est là pour partager Wink

Si c'est résolu n'oublie pas de l'indiquer !

@+




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Pas vraiment a vrai dire mais je reviendrai up le post d'ici fin de semaine !

Je bosse de mon coté pour apporter des compléments et partager la finalité sur ca peut servir a d'autres personnes !

Je marquerai le post en fini quand j'aurai fini le projet d'ici 1 semaine Wink



Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Ok ça marche pas de souci Wink

N'hésites pas si tu as besoin ^




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Du coup j'ai commencé mon recettage et j'ai remarqué que sur Win10 cela ne fonctionnait aps trop, j'ai donc modifié le chemin de clef avec un traitement de duplicata de ligne ( allez savoir pourquoi ca affiche les programes en 10 exemplaires ... Mort de Rire )
Code:
@echo off
setlocal enabledelayedexpansion
set ExportFileW7=c:\script\softexportW7.csv

MD c:\test

for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
   if "%version%" == "10.0" echo Win10 ou Serveur 2K16
   if "%version%" == "6.3" echo Win8.1 ou Serveur 2K12R2
   if "%version%" == "6.2" echo Win8 ou Serveur 2K12
   if "%version%" == "6.1" echo Win7 ou Serveur 2K8R2


for /F "tokens=*" %%A in ('"REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"') DO (
     for /f "tokens=2,*" %%A in ('REG QUERY "%%A" ^| find /i "DisplayName"') do set DisplayName=%%B
     for /f "tokens=2,*" %%C in ('REG QUERY "%%A" ^| find /i "DisplayVersion"') do set DisplayVersion=%%D
   
    echo !DisplayName!;!DisplayVersion!; >> %ExportFileW7%
    )
   
   
   
for /F "tokens=*" %%A in ('"REG QUERY HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"') DO (
     for /f "tokens=2,*" %%A in ('REG QUERY "%%A" ^| find /i "DisplayName"') do set DisplayName=%%B
     for /f "tokens=2,*" %%C in ('REG QUERY "%%A" ^| find /i "DisplayVersion"') do set DisplayVersion=%%D
   
    echo !DisplayName!;!DisplayVersion!; >> %ExportFileW7%
     )
   


   

for /f "delims=" %%C in ('type c:\script\softexportW7.csv') do (
find /c "%%C" c:\script\traitement.csv
if errorlevel==1 echo %%C >> c:\script\traitement.csv
)





Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Je reviendrai poster un batch qui utilisera ma fonction de la version pour n’exécuter que ce qu'il faut en fonction des versions d'OS Wink



Répondre en citant
Message ## SCRIPT DE Récup/Edit/Comparaison 
Hello Salmo,


Oui c'est normal pour les doublons, le même programme peut être dans plusieurs clé !

Voici un exemple de code structuré, pour quand tu auras des batch de 30.000 lignes ça sera + clair.
Il faut commencer tôt les bonnes habitudes Okay

Code:

@echo off
setlocal enabledelayedexpansion
set ExportFilePathName=c:\script\softexport

:: Appel des fonctions dans leur ordre d'exécution
call :function_Check_Version
call :function_Condition_Version "%version%"
call :function_Extract
call :function_Supprime_Doublon

pause
exit
:: Fin du batch

:: Fonctions

:function_Check_Version
   for /f "tokens=4-5 delims=. " %%i in ('ver') do set version=%%i.%%j
goto :EOF

:function_Condition_Version
   if %1 == "10.0" (
      set FILE=%ExportFilePathName%_w10.csv
      set RegUninstall="REG QUERY HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
   )
   if %1 == "6.1" (
      set FILE=%ExportFilePathName%_w7.csv
      set RegUninstall="REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
   )
goto :EOF

:function_Extract
   for /F "tokens=*" %%A in ('%RegUninstall%') DO (
      for /f "tokens=2,*" %%B in ('REG QUERY "%%A" ^| find /i "DisplayName"') do set DisplayName=%%C
      for /f "tokens=2,*" %%D in ('REG QUERY "%%A" ^| find /i "DisplayVersion"') do set DisplayVersion=%%E
      echo !DisplayName!;!DisplayVersion!; >> %FILE%
   )
goto :EOF

:function_Supprime_Doublon
:: Ici ta fonction pour supprimer les doublons (par exemple)
:: Je te laisse chercher un peu, la tienne comporte une erreur ;)
goto :EOF





______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Message ## SCRIPT DE Récup/Edit/Comparaison 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch