Page 1 sur 1
Demande d'aide pour editer un fichier .ini en batch
Posté : 17 août 2010 15:02
par Abnegatus
Bonjour a tous,
J'ai cherche un peu partout mais la reponse est quasiment a chaque fois faut faire du VBS.
Je vous explique mon cas,
Je cherche a editer un fichier .ini (225 Lignes environ) et remplacer une partie du contenu, un morceau correspondant aux parametres d'imprimantes, actuellement le morceau en question est de taille variable.
Ce qui precede est fixe, ce qui suit est variable aussi mais doit etre maintenu en l'etat, cepandant ce dernier "bloc" contient une balise ([NODE]).
J'avais un espoir avec edlin mais impossible de l'utiliser en ligne de commande (je ne sais si je suis passe a cote de la bonne methode ou si c'est impossible en ligne de commande), et vu que la modif va concerner environ 2000 postes je n'envisage pas de le faire a la main
Je vous colle un morceau du .ini
"Ce bloc est fixe"
IMPR95L_ext=IMPR15L,IBMR1
IMPR96L_ext=IMPR16L,IBMR1
IMPR97L_ext=IMPR17L,IBMR1
IMPR98L_ext=IMPR18L,IBMR1
IMPR99L_ext=IMPR19L,IBMR1
"Ceci est a modifier par un bloc de ma conception"
SPL_ext=SPL,GDI
IMPR00L_def=IMPR00L,winspool,\\232-0\impr00l
IMPR02C_def=IMPR02C,TTY,\\232-2\impr02c
IMPR04C_def=IMPR04C,TTY,\\232-4\impr04c
IMPR07C_def=IMPR07C,TTY,\\232-7\impr07c
IMPR08C_def=IMPR08C,TTY,\\232-8\impr08c
IMPR09C_def=IMPR09C,TTY,\\232-9\impr09c
CENTRAL_ext=CENTRAL,IBMR1
CENTRAL_def=CENTRAL,HPPCL,\\SYSTEM\CENTRAL
IMPR05C_def=IMPR05C,TTY,\\232-5\impr05c
IMPR01L_def=impr01l,winspool,\\232-1\impr01l
SPL_LFBM=hCopy
SPL_def=.
"Ce bloc est a garder tel qu'existant dans le .ini d'origine"
[NODE]
Node_LOCAL=c:
Node_c=c:
Node_d=c:
Auriez vous une idée ou connaissez vous un editeur de texte en ligne de commande qui me permette de faire cela ?!?
Merci pour votre aide.
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 09:24
par Laddy
Bonjour
regarde du coté de la commande externe sed.exe : remplacer une chaine de caractère
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 12:35
par DarkBatcher
Bonjour,
Moi j'ai une solution toute simple :
Dans le même dossier que ton batch le fichier ini que tu as corrigé puis tu fais un copy:
Code : Tout sélectionner
::en copiant le fichier que tu as corrigé vers le fichier d'origine tu remplace le fichier ini d'origine
copy fichiercorrigé.ini monchemin\monfichier.ini
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 18:18
par Abnegatus
DarkBatcher a écrit :Bonjour,
Moi j'ai une solution toute simple :
Dans le même dossier que ton batch le fichier ini que tu as corrigé puis tu fais un copy:
Code : Tout sélectionner
::en copiant le fichier que tu as corrigé vers le fichier d'origine tu remplace le fichier ini d'origine
copy fichiercorrigé.ini monchemin\monfichier.ini
Je ne comprends pas ce que tu sous entend.
@laddy, j'ai entendu parler de cela oui, pas encore regarde en profondeur les possibilites offertes par sed, je dois dire que j'esperais rester sur du batch "pur".
Connais tu un bon tuto sur sed, ce que j'ai pu trouve est du genre leger voir perime (lien mort depuis longtemps).
J'ai disons un "debut" avec quelque chose comme :
echo 1,108 D | edlin c:\truc.ini
En ligne a ligne c'est parfait (il cree meme un .bak de lui meme) mais une fois dans un batch, a l'execution le poste bloque (ntvdm passe a 100% d'utilisation processeur).
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 18:52
par DarkBatcher
Je sous entend que ça n'à pas de sens de vouloir éditer un .ini depuis un batch car c'est une pure perte de temps. Je te propose de remplacer le fichier par un autre fichier que tu as déjà corige.
Ce que je propose c'est:
- tu met le fichier ini avec un bloc de ta conception dans le meme répertoire que ton batch.
-puis dans ton batch de mettre une ligne qui copie le fichier de ta conception vers le fichier ini que tu veux modifier.
-le fichier que tu veut modifier sera remplacer par le fichier ini de ta conception.
Autrement dit, en une seule ligne de code:
Je peux pas faire plus clair .
Et en plus tu reste sur du batch pur
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 19:13
par Abnegatus
Ok, je comprends, mais ca n'est pas si simple.
Un bloc du fichier .ini original doit etre conserve, et il est different sur chaque poste (ca contient les parametrage de l'utilisateur), en somme impossible d'ecraser par un preecrit, n'aurais pas eu a me casser la tete sinon

Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 19:22
par DarkBatcher
Le bloc que tu ne dois pas modifier est avant ou après le bloc que tu dois modifier?
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 19:26
par Abnegatus
Cf mon premier post, il est a la fin.
Ca donne :
Bloc fixe
.
.
Bloc a modifier
.
.
Bloc a garder en l'etat.
Je precise de plus que le bloc a modifier est de taille variable (ca n'aide pas).
Par contre le bloc a garder commence par une balise : [NODE]
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 19:52
par Dodoche28
Bonjours tous le monde
Pour commencer je pense qu'il faudrait procédé procédé de la sort:
-ouvrir le fichier(fichier.INI) dans le bat et donc récupérer les données
-ensuite prendre toutes les données a partir de la fin de la ligne du bloc stable et les mettre dans un fichier(Temp.txt)
-ouvrir le fichier Temp.txt dans le bat et donc récupérer les données
-chercher dans le fichier Temp.txt la ligne avec le mot [NODE] et mettre la ligne avec le mots dans une variable(variable=Ligne)
-redéfinir la ligne: ligne-1
-copier de la ligne de la fin du bloc stable à la ligne(Ligne) et le mettre dans un fichier (Imprimante.txt)
-ensuite remplacer tous se qui à a faire dans Imprimante.txt ^^
-puis prendre le bloc stable dans fichier.INI et le mettre dans un fichier(FINI.txt)
-prendre le texte changer dans Imprimante.txt et le mettre dans le fichier(FINI.txt)
-prendre le texte a partir de la ligne(variable=Ligne) jusqu'à la fin et le mettre dans le fichier(FINI.txt)
-Pour finir renommer le fichier(FINI.txt) en fichier.INI et le remplacer.
- Supprimer les fichier temporaire.
Voilà j'espère vous avoir bien aider à commencer...
Re: Demande d'aide pour editer un fichier .ini en batch
Posté : 18 août 2010 20:37
par DarkBatcher
j'ai un code. tu met le bloc corrigé dans le même répertoire que le batch dans le fichier bloc.ini par ex (fichier.ini est le fichier à éditer) :
Code : Tout sélectionner
@echo off
rem édition d'un fichier ini
Rem darkbatcher & dodoche28
Rem darkbatcher@gmail.com
Rem -----------------
@echo off
setlocal enabledelayedexpansion
set fichieramodifier=%1%
set bloc=%2%
set balise=%3%
rem on lit le ini qui n'est pas modifié
For /f %%À in (!fichieramodifier!) do (
Rem si %%A et égal à "[node]" on met var à 1
If %%A%="[node]" set /a var=1
Set ligne=%%A%
If "!var!"="1" echo !ligne!>>tmp.txt
)
Rem on à donc tout le bloc node dans tmp.txt
For /f %%A in (!fichieramodifier!) do (
Rem si %%A% contient le nom du bloc, on quitte la boucle, sinon on écrit %%A dans fichiercorrige.ini
If "%%A%"="!balise!" goto suite
Set ligne=%%A%
Echo !ligne!>>fichiercorrige.ini
)
:suite
Rem on a le copié fichier.ini dans fichiercorrige.ini jusqu'au bloc que l'on veut modifier
For /f %%A% in (!bloc!) do (
Rem on copie la totalité du bloc corrigé à la suite de fichiercorrige.ini
Set lignes=%%A%
Echo !lignes!>>fichiercorrige.ini
)
Rem on a le le début du fichier ini et le bloc corrigé dans fichiercorrige.ini
For /f %%A in (tmp.txt) do(
Rem on copie le bloc stable copié dans tmp.txt
Set ligne=%%A%
Echo !ligne!>>fichiercorrige.ini
)
Rem on a maintenant dans le fichier fichiercorrige.ini le début du ini plus le bloc corrigé et le bloc stable, il ne reste plus qu'a le copier
Copy fichiercorrige.ini !fichieramodifier!
Del tmp.txt
Del fichiercorrige.ini