Problème pour modifier la valeur d'une ligne dans un fichier

Problème pour modifier la valeur d'une ligne dans un fichier - Shell/Batch - Programmation

Marsh Posté le 29-06-2010 à 14:42:55    

Je souhaite, à l'aide d'un batch, modifier le contenu d'un fichier ini avant le lancement de l'application qui lui est liée
 
apparté : le soft est msnbuster, qui me sert à limiter le temps d'utilisation du pc pour les enfants
Pourquoi ce batch alors que le soft permet de définir des tranches horaires journalières, et le nombre d'heures au quotidien ?
Et bien dans le cas ou, ponctuellement, nous souhaitons limiter exceptionnellement de façon differente pour un certain jour
exemple : lundi =180min allouées mais exceptionnellement ils n'auront que 30min

 
Je souhaite donc lire le fichier MSNBUSTER.INI, trouver la ligne correspondante au jour en cours (exemple J2) et modifier la valeur après "=" qui est, par défaut à "180".
 
Fichier MSNBUSTER.INI

Code :
  1. MAXDURATION_J1=180 ;
  2. NBTIMESLOTS1=1
  3. STARTHOUR_J10=6
  4. STARTMINS_J10=0
  5. STOPHOUR_J10=22
  6. STOPMINS_J10=0
  7. MAXDURATION_J2=180 ;
  8. NBTIMESLOTS2=1
  9. STARTHOUR_J20=6
  10. STARTMINS_J20=0
  11. STOPHOUR_J20=22
  12. STOPMINS_J20=0
  13. MAXDURATION_J3=180 ;
  14. NBTIMESLOTS3=1
  15. STARTHOUR_J30=6
  16. STARTMINS_J30=0
  17. STOPHOUR_J30=22
  18. STOPMINS_J30=0


 
Batch que j'ai adapté, sans succès :(

Code :
  1. @ECHO OFF
  2. SET /P timer=temps?=
  3. SET valeur1=MAXDURATION_J2
  4. FOR /F "delims=" %%A IN (msnbuster.ini) DO (
  5.     SET Text=%%A
  6.     CALL :Replace
  7. ) >>msnbuster.ini
  8. GOTO End
  9. :Replace
  10. CALL SET NewText=%%Text:%valeur1%=MAXDURATION_J4=%timer%%%
  11. ECHO %NewText%
  12. :End


 
Il ajoute bien la valeur à la bonne ligne mais il laisse l'ancienne valeur après !

Code :
  1. MAXDURATION_J1=180 ;
  2. NBTIMESLOTS1=1
  3. STARTHOUR_J10=6
  4. STARTMINS_J10=0
  5. STOPHOUR_J10=22
  6. STOPMINS_J10=0
  7. MAXDURATION_J2=30=180 ;
  8. NBTIMESLOTS2=1
  9. STARTHOUR_J20=6
  10. STARTMINS_J20=0
  11. STOPHOUR_J20=22
  12. STOPMINS_J20=0
  13. MAXDURATION_J3=180 ;
  14. NBTIMESLOTS3=1
  15. STARTHOUR_J30=6
  16. STARTMINS_J30=0
  17. STOPHOUR_J30=22
  18. STOPMINS_J30=0


 
Alors que le bon résultat devait être

Code :
  1. MAXDURATION_J2=30

;
 
Avez-vous une idée car je tourne en rond avec des tests non concluants dans tous les sens :(


Message édité par CARL KEATON le 29-06-2010 à 15:55:28
Reply

Marsh Posté le 29-06-2010 à 14:42:55   

Reply

Marsh Posté le 29-06-2010 à 15:54:05    

J'arrives bien à selectionner la valeur à modifier, mais comment la modifier ?
 

Code :
  1. for /f "tokens=2 delims=J4;" %%a in ('type msnbuster.ini ^| findstr "MAXDURATION_J4"') do @echo %%a


Message édité par CARL KEATON le 29-06-2010 à 15:54:31
Reply

Marsh Posté le 29-06-2010 à 19:41:05    

Quelque chose comme ça ?

Code :
  1. @ECHO OFF
  2. SET ini_file=msnbuster.ini
  3. SET wrk_file=%ini_file:.=_%.wrk
  4. SET /P jour=jour?=
  5. SET /P timer=temps?=
  6. SET param=MAXDURATION_J%jour%
  7. IF EXIST %wrk_file% DEL /F %wrk_file%
  8. FOR /F "delims== tokens=1,2" %%A IN (%ini_file%) DO (
  9.    CALL :Replace %%A %%B
  10. ) >>%wrk_file%
  11. MOVE /Y %wrk_file% %ini_file%
  12. GOTO :EOF
  13. :Replace
  14.    IF "%1" == "%param%" (
  15.           ECHO %1=%timer% ;
  16.    ) ELSE ECHO %1=%2
  17.    GOTO :EOF

Ce qui donne :

>type msnbuster.ini
MAXDURATION_J1=180
NBTIMESLOTS1=1
STARTHOUR_J10=6
STARTMINS_J10=0
STOPHOUR_J10=22
STOPMINS_J10=0
MAXDURATION_J2=123 ;
NBTIMESLOTS2=1
STARTHOUR_J20=6
STARTMINS_J20=0
STOPHOUR_J20=22
STOPMINS_J20=0
MAXDURATION_J3=180
NBTIMESLOTS3=1
STARTHOUR_J30=6
STARTMINS_J30=0
STOPHOUR_J30=22
 
>msnbuster
jour?=2
temps?=222
 
>type msnbuster.ini
MAXDURATION_J1=180
NBTIMESLOTS1=1
STARTHOUR_J10=6
STARTMINS_J10=0
STOPHOUR_J10=22
STOPMINS_J10=0
MAXDURATION_J2=222 ;
NBTIMESLOTS2=1
STARTHOUR_J20=6
STARTMINS_J20=0
STOPHOUR_J20=22
STOPMINS_J20=0
MAXDURATION_J3=180
NBTIMESLOTS3=1
STARTHOUR_J30=6
STARTMINS_J30=0
STOPHOUR_J30=22
 
>


 
Jean-Pierre.

Reply

Marsh Posté le 30-06-2010 à 00:39:09    

tout simplement grandiose  !!!!!!!!!!!!!!!!!!!
 
Merci bcp !!!!!!!!!!!!!!!!
 
chapeau bas Monsieur :)

Reply

Sujets relatifs:

Leave a Replay

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