recupere des variables dans un .ini (debutant)

recupere des variables dans un .ini (debutant) - Shell/Batch - Programmation

Marsh Posté le 31-07-2004 à 12:14:15    

bonjour,
je suis nul en prog.
Je dois faire un batch qui extrait des variables d'un fichier .ini:
 
[SuperDat-IA32]
EngineVersion=4320
DATVersion=4382
FileName=sdat4382.exe
FileSize=5614244
Checksum=9313,D945
 
[ZIP]
EngineVersion=0
DATVersion=4382
FileName=dat-4382.zip
FilePath=/pub/antivirus/datfiles/4.x/
FileSize=3960397
Checksum=E5AB,AE29
MD5=5226781401669f89c572bb9c50ea8f
 
 
 
Comme vous voyez, des champs se repetent plusieurs fois; j'aimerai recuperer :
dans la section SuperDat-IA32 => l'engine version
dans la section zip => la DAT version
et mettre tout ca dans des variables differentes (afin de comparer les versions avec celles existante sur mon server)
 
 
C'est possible de faire çà dans un batch DOS ???
Merci à tous d'avance

Reply

Marsh Posté le 31-07-2004 à 12:14:15   

Reply

Marsh Posté le 31-07-2004 à 14:50:35    

je ne saurais trop de conseiller d'utiliser un vrai language pour faire des scripts, que ce soir du perl, du python, un truc de ce genre
 
le batch c tellement naze et mal foutu

Reply

Marsh Posté le 31-07-2004 à 15:38:29    

bon Ok, à la limite un script visual basic ou quelque chose comme çà; mais pour ma soluce ?

Reply

Marsh Posté le 31-07-2004 à 19:03:51    

Hum hum ça sent le McAfee 4.5 ça :D

Reply

Marsh Posté le 02-08-2004 à 13:04:23    

bon j'arrive a afficher avec :
grep -A 5 -c [SuperDat-IA32] update.ini | find "EngineVersion"
 
ca m'affiche donc par exemple :
Engineversion=4321
 
Mais j'aimerai que la variable Engineversion prenne cette valeur, pas que ca affiche juste !!! Quelqu'un ???

Reply

Marsh Posté le 02-08-2004 à 13:44:04    

j'y travaille l'ami...j'y travaille...;-)

Reply

Marsh Posté le 03-08-2004 à 11:50:47    

@echo off
 
set inifile=%1
set flag=0
 
set section=%2
set variable=%3
 
call :GETVALUE %section% %variable%
 
 
goto EXIT
 
 
 
:GETVALUE
 
FOR /F "eol=; tokens=1-2 delims= " %%i in (%inifile%) do (
set line=%%i
 
call :PROCESSLINE %1 %2
)
 
goto EXIT
 
:PROCESSLINE
 
if "%flag%" EQU "1" call :PROCESSVAR %2
 
if "%line%" EQU "[%1]" set flag=1
 
 
goto EXIT
 
:PROCESSVAR
 
echo %line% > temp.txt
 
FOR /F "usebackq tokens=1-2 delims==" %%i in (temp.txt) DO (
 
if "%%i" EQU "%1" (
set %%i=%%j
set flag=0
)
 
)
 
del temp.txt
 
goto EXIT
 
 
:EXIT


Message édité par Arrakeen le 03-08-2004 à 14:18:43
Reply

Marsh Posté le 03-08-2004 à 11:52:59    

tu paste ça dans un .bat
le .bat prend 3 parametres : nom fichier .ini, nom section, nom variable
 
ex: mybat.bat myini.ini ZIP FileSize
 
tu auras la valeur de FileSize de la section [ZIP] dans la variable du meme nom :
 
C:\>set FileSize
FileSize=3960397

Message cité 1 fois
Message édité par Arrakeen le 03-08-2004 à 11:54:41
Reply

Marsh Posté le 04-08-2004 à 07:53:19    

Une chose a dire >
un GRAND merci, ca marche impeccable (j avais juste un probleme au debut avec les retour chariot en fin de ligne, une fois corrige c tout bon)
 
Vraiement bravo pour ce beau boulot ;)

Reply

Marsh Posté le 09-08-2004 à 19:56:44    

argg non j'ai un probleme :
 
tout marche impeccable sur windows2000.
Mais mon batch doit etre implemente sur du NT4, qui ne reconnait pas la commande for avec "usebackq"
 
Y-a-t-il un moyen de faire fonctionner sans usebackq ? Mes tentatives se sont soldees par des echecs  :??:  :??:  :??:  

Reply

Marsh Posté le 09-08-2004 à 19:56:44   

Reply

Marsh Posté le 10-08-2004 à 16:19:45    

iop iop...oki je vais revoir ma copie...je te tiens au courant...

Reply

Marsh Posté le 10-08-2004 à 22:26:48    

non c'est bon je pense avoir trouvé :
pour l'adapter a NT4, virer le usebackq
 
et la ligne suivante, if "%%i" EQU "%1" (
remplacer le EQU par ==
 
voilivoilou
 

Reply

Marsh Posté le 26-03-2011 à 23:10:15    

Arrakeen a écrit :

tu paste ça dans un .bat
le .bat prend 3 parametres : nom fichier .ini, nom section, nom variable
 
ex: mybat.bat myini.ini ZIP FileSize
 
tu auras la valeur de FileSize de la section [ZIP] dans la variable du meme nom :
 
C:\>set FileSize
FileSize=3960397


salut  
j'ai essayé avec l'exemple suivant  mybat.bat myini.ini ZIP FileSize et rien m'affiche donc j'ai ajouté "echo %%i" pour que je le teste qu'il fonctionne correctement ou non  
FOR /F "eol=; tokens=1-2 delims= " %%i in (%inifile%) do (  
set line=%%i  
echo %line%
 
call :PROCESSLINE %1 %2  
donc c'est ce qu'il m'affiche:  
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f
MD5=5226781401669f89c572bb9c50ea8f


Message édité par hamoudaisi le 26-03-2011 à 23:28:03
Reply

Marsh Posté le 28-03-2011 à 13:47:16    

rajoute au début du script :  
setlocal ENABLEDELAYEDEXPANSION


---------------
Quand on aime on ne compte pas. Quel Dilemme lorsque l'on aime compter !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed