Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] Comparaison de fichier.txt
Auteur Message
Répondre en citant
Message [R] Comparaison de fichier.txt 
Bonjour à tous,
Je suis dans le dépannage informatique, et avant de renvoyer les produits réparés ils passent par un logiciel de test fourni par le constructeur. Ce logiciel vérifie si le BIOS est à jour et si il ne l'est pas me met un bon gros FAIL, donc j’essaye de créer un batch qui me permettrais de comparer le version du bios de la machine sur laquel je l'exécute "biosversion.txt", avec un fichier texte présent sur ma clé USB"NB-Bios.txt". Histoire de gagner un peu de temps a chaque fois, ne pas avoir à consulter le fichier et vérifier la version du bios, que tous ce fasse automatiquement.
Donc, je sais déja qu'avec:

@echo off
wmic bios get biosversion > biosversion.txt
pause

Je crée un fichier avec ma version de BIOS, maintenant j'aimerais savoir si il est possible de comparer la version de mon BIOS à la liste contenu dans "NB-Bios.txt".



Dernière édition par Jerem448 le Sam 19 Aoû 2017 - 14:06; édité 2 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] Comparaison de fichier.txt 
Bonjour,
on peut récupérer les contenus des deux fichiers en variable et les comparer.
Pour moi le fichier donne ça :
Citation:
BIOSVersion
{"HPQOEM - 1", "F.67", "INSYDE Corp. - 10000001"}

Certains caractères posent problème pour se contenter d'un simple set /p a_comparer=<biosversion.txt. La commande comp serait parfaite, mais elle pose une question à la fin ce qui rend impossible l'automatisme :/

Code:
@echo off
:: Récupération de la 2e ligne
for /f "tokens=* skip=1" %%A in ('type biosversion.txt') do set a_comparer=%%A
for /f "tokens=* skip=1" %%A in ('type NB-Bios.txt') do set reference=%%A

:: Les fichiers contiennent les caractères "" (quote) ce qui pose des problèmes avec IF donc on vire ces caractères.
set a_comparer=%a_comparer:"=%
set reference=%reference:"=%

:: Comparaison
if "%a_comparer%"=="%reference%" (
  echo OK c'est pareil
) else echo FAIL c'est pas pareil
pause




Dernière édition par Hugo7 le Mar 8 Aoû 2017 - 17:46; édité 1 fois

______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] Comparaison de fichier.txt 
Ok merci je teste demain matin et te tiens au courant. Encore merci pour ta réponse rapides.



Répondre en citant
Message [R] Comparaison de fichier.txt 
Pas de problème, je viens d'éditer mon code à cause d'un fail par contre... Maintenant j'ai testé ça marche Okay




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] Comparaison de fichier.txt 
Ok pas de soucis j'ai pas encore eu le temps de le copier tu vas trop vite Mort de Rire



Répondre en citant
Message [R] Comparaison de fichier.txt 
Bonsoir, j'ai testé et ça ne fonctionne pas... Sans doute parce-que le biosversion contient trop d'info, alors que le NB-Bios contient juste une liste de model et leur bios
ex: ux360uak = 301
et donc la question est :peut on recupérer seulement les parties qui nous interessent?



Répondre en citant
Message [R] Comparaison de fichier.txt 
Oui avec for/f et éventuellement un tronquage de variable ça devrait être possible, j'ai besoin d'un exemple précis de ce qu'on attend, et de savoir comment ça peut varier (syntaxe et nombre de caractères).
Comme je l'avais dit, pour mon ordi j'obtiens un truc comme ça :
Citation:
BIOSVersion
{"HPQOEM - 1", "F.67", "INSYDE Corp. - 10000001"}

Que doit-on récupérer là dedans ?

Quelle est la syntaxe précise de la liste ?
Si c'est juste
Citation:
modèle1 = version1
modèle2 = version2
modèle3 = version3

avec rien d'autre dans le fichier (et une seule ligne par modèle, càd. pas plusieurs fois le même modèle), on peut facilement passer par for /f avec un ^| find et comparer la version :
Code:
setlocal enabledelayedexpansion
::Note : ceci est un exemple, ça ne fonctionnera pas mais c'est juste pour donner une idée dans l'hypothèse où le fichier liste est de la forme comme présentée ci-dessus.
:: On considère que la version de la machine étudiée a été stockée juste avant dans la variable B et que son modèle est dans A
for /f "tokens=1,* delims==" %%M in ('type NB-Bios.txt ^| find /i "%A% ="') do (
  :: on vire l'espace
  set v=%%N
  set v=!v: =!
  if "!v!"=="%B%" (
    echo OK
  ) else echo PAS OK
)
pause


(version alternative du find, pour plus de précision, mais ça j'ai pas testé : pour rechercher une chaîne en début de ligne on utilise findstr /B /I au lieu de find /I)




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] Comparaison de fichier.txt 
oui je récupere la même chose:

BIOSVersion
{"_ASUS_ - 1072009", "X541UJ.302", "American Megatrends - 5000C"}

et oui le NB-Bios ressemble a ça:

E202SA = 302
E203NA = 204
E205SA = 302
E200HA = 303
E402MA = 207
...
X541UJ = 302
X541SC = 301
X541SA = 301
X542UA = 202

Donc le truc ce serait de récupere dans ce cas la le model du bios X541UJ et sa version 302 pour ensuite les comparer au fichier NB_BIOS.



Répondre en citant
Message [R] Comparaison de fichier.txt 
C'est parfait Wink

Je te conseille mon tutoriel qui explique la boucle for que j'utilise pour isoler les 2 infos utiles, il est illustré par des murs de briques Laughing http://batch.xoo.it/t4285-D-composer-une-variable.htm
Un autre de mes tutos explique pourquoi j'utilise setlocal dans la deuxième boucle for /f de mon code http://batch.xoo.it/t5183-Les-variables-dans-FOR.htm


Testé et fonctionnel.
Code:
@echo off
echo [Info] R‚cup‚ration de la version BIOS de cette machine.
echo.
wmic bios get biosversion > biosversion.txt
echo [Info] Termin‚. Pressez une touche pour comparer le r‚sultat.
echo.
pause>nul

:: Récupère le modèle et le numéro associé :
:: EXEMPLE {"_ASUS_ - 1072009", "X541UJ.302", "American Megatrends - 5000C"}
:: C'est de la forme : {"A", "B.C", "D"} donc :
echo [Info] Extraction de la version depuis le r‚sultat de la r‚cup‚ration.
echo.

:: 1) On prend la bonne ligne (la 1ère ligne est juste "BIOSVersion")
for /f "tokens=* skip=1" %%A in ('type biosversion.txt') do set a_comparer=%%A

:: 2) On vire les espaces, les '{}' et les '""' qui ne nous servent à rien
set a_comparer=%a_comparer:"=%
set a_comparer=%a_comparer: =%

:: 3) On obtient alors un truc de la forme : A,B.C,D
:: EXEMPLE _ASUS_-1072009,X541UJ.302,American Megatrends-5000C
:: A,B.C,D : maintenant on veut juste B et C : (on spécifie deux délimitateurs dans ce cas précis : la virgule et le point)
for /f "tokens=1,2,3,4 delims=,." %%A in ("%a_comparer%") do (
  set model=%%B
  set version=%%C
)

echo [Debug] variables : %%model%% = %model% // %%version%% = %version%
echo.

:: ceci sert à pouvoir utiliser la forme !variable!
setlocal enabledelayedexpansion

:: 4) On récupère la ligne qui correspond à ce modèle d'ordinateur (findstr/b cherche le nom du modèle si il est présent en début de ligne) afin d'extraire ce qu'il y a après le signe égal
for /f "tokens=1,* delims==" %%M in ('type NB-Bios.txt ^| findstr /b /i "%model% ="') do (
 :: on vire l'espace (qu'il y a après le égal)
  set v=%%N
  set v=!v: =!
  if "!v!"=="%version%" (
    echo [R‚sultat] OK la version correspond au fichier NB-bios
  ) else echo [R‚sultat] PAS OK la version ne correspond pas au fichier NB-bios
)
echo.
echo [Debug] La version contenue dans le fichier NB-Bios est %v%
echo.
echo Pressez une touche pour fermer.
pause>nul



Testé pour :
Citation:
BIOSVersion
{"HPQOEM - 1", "F.67", "INSYDE Corp. - 10000001"}

mais peu importe la taille des caractères de la version, tant qu'elle ne contient pas d'espaces.

à gauche : quand la version correspond pas | à droite quand c'est bon (j'ai modifié le fichier NB-bios pour tester)






______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] Comparaison de fichier.txt 
YO! Désolé pour le silence radio, ton batch fonctionne au poil, je te remercie!!
PS: je viens de jetter un oeil a tes tutos mais c'est un peu trop avancé pour moi... je vais commencer par un truc du genre "la programmation pour les nuls" Sad



Répondre en citant
Message [R] Comparaison de fichier.txt 
N'oublie pas d'éditer ton premier message (le topic) pour ajouter un [R] juste avant le titre, pour marquer comme résolu Wink




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] Comparaison de fichier.txt 
Salut, c'est encore moi!
Après quelques échecs j'ai réussi a modifier un peu ton code pour le rendre plus clair,et en couleur, pour mes collègues qui sont plus mauvais que moi Mort de Rire
Citation:
@echo off
color 09
wmic bios get biosversion > biosversion.txt
echo Pressez une touche pour verfirier la version du BIOS
pause>nul


for /f "tokens=* skip=1" %%A in ('type biosversion.txt') do set a_comparer=%%A

set a_comparer=%a_comparer:"=%
set a_comparer=%a_comparer: =%


for /f "tokens=1,2,3,4 delims=,." %%A in ("%a_comparer%") do (
set model=%%B
set version=%%C
)

echo [Debug] variables : %%model%% = %model% // %%version%% = %version%
echo.


setlocal enabledelayedexpansion

for /f "tokens=1,* delims==" %%M in ('type NB_BIOS.txt ^| findstr /b /i "%model% ="') do (
set v=%%N
set v=!v: =!
if "!v!"=="%version%" (
goto BIOSOK
) else goto BIOSERROR
)


:BIOSOK
color 0a
echo.
echo BIOS a jour
echo.
goto end

:BIOSERROR
color 0c
echo.
echo BIOS PAS A jour
echo.
goto end

:end
echo.
echo [Debug] La version contenue dans le fichier NB_BIOS est %v%
echo.
echo Pressez une touche pour fermer.
pause>nul



Encore merci



Message [R] Comparaison de fichier.txt 


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