Partage
  • Partager sur Facebook
  • Partager sur Twitter

Traitement fichier avec batch

Modifier le contenu d'un fichier avec un script batch ?

8 juin 2011 à 15:39:21

Bonjour,

J'aimerais savoir s'il est possible (et si oui, comment) de modifier une partie du contenu d'un fichier texte avec un script batch (.bat)

Je m'explique : Je travaille sur un réseau de 200 postes et je dois changer pour chaque machine une adresse IP contenue dans un fichier .ini (je veux donc créer un fichier .bat et l'exécuter sur tous les postes par le réseau).

Je souhaite donc remplacer l'IP écrite dans le fichier par la nouvelle IP (par exemple, une ligne contenant "IP:192.168.1.1" devra devenir "IP:192.168.10.10") et bien entendu sans supprimer le reste du fichier (qui n'est pas commun à tous les poste).

Existe-t-il donc des commandes MS-DOS pour rechercher une chaine de caractères (par exemple "192.168.*" pour la remplacer par une autre (qui elle est fixe pour tous les postes) ?

Ma question est assez compliquée j'espère que quelqu'un pourra y répondre... Merci :)

PS : Si ma requête n'est pas claire merci de m'en faire part j'éditerais ce post.
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2011 à 18:53:57

Bonjour, regarde du coté de la boucle for. Tu as tout pour faire ce que tu demande avec ça.
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2011 à 19:27:01

Oui j'imagine mais que dois-je mettre dans le for ?
Il y a des fonctions de parcours de texte ? De test de caractères ? Ou autres ?
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2011 à 20:15:51

Je m'ennuyais, cadeau :

set fichier=TonFichier.ini
for /f "tokens=1 delims=:" %%I in ('type "%fichier%"') do (
if not %%I==IP (
echo %%I>>provFile.ini
) else (
echo CeQueTuVeuxMettrePourRemplacerLaLigneCommençantParIP>>provFile.ini
)
)
del /f /q %fichier%
ren "provFile.ini" "%fichier%"

Si tu as bien suivi, j'écris un second fichier (TonFichier.ini) à l'aide du contenu du premier (provFile.ini) puis je supprime le premier et renomme le second comme le premier. Tu n'as qu'a modifier la première ligne en remplaçant TonFichier.ini par le nom de ton fichier à modifier.

Il faut également remplacer CeQueTuVeuxMettrePourRemplacerLaLigneCommençantParIP par IP:*.*.*.*
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2011 à 20:37:47

Merci beaucoup ça va m'aider =)

Je teste demain au boulot :p
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2011 à 21:08:23

Si tu as envie d'apprendre, voici un petit bonus qui t'apprend pas mal de chose au niveau du batch et des fichiers textes ;)

Tufanik : Tu à l'air de t'y connaître beaucoup en boucle for :)
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2011 à 21:09:25

Niquel merci Zaibai je vais regarder ça ;)

EDIT : Au niveau du for il ne vaut pas mieux faire quelque chose du style
for /f "delims=" %%i in ('type "fichier.txt" ^|findstr /i /r "IP"') do ...
?
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2011 à 8:56:19

J'avoue avoir du mal avec les boucles for en batch...
Tufanik ton code marche mais j'ai 2 problèmes :

1) ton code supprime TOUTES les lignes contenant le caractère ":" (il ne modifie que celles contenant "IP:")

2) j'ai 2 lignes à modifier (en fait "IP:192.168.1.1" était un exemple non réel), les 2 lignes à modifier sont de la forme
"Server=192.168.1.1"
et
"[info_qui_varie_selon_le_poste] /SERVER:192.168.9.245"

Je n'arrive pas à faire un script qui modifie les 2 lignes (surtout la deuxième dont le contenu est variable, j'imagine que je dois d'abord mémoriser le contenu de la ligne dans une variable). Peut être avec 2 boucles for qui s'arrêteraient à la première modification effectuée ?

Merci de m'aider encore je suis en pleine galère là o_O
  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2011 à 16:01:20

Bonjour, quand tu dis "Server=192.168.1.1", la partie Server= est-elle fixe ? Les guillemets sont-ils écrit dans le fichier pas ?
Pour être clair, la ligne est "Server=192.168.1.1" ou Server=192.168.1.1

Pour la seconde info à modifier, [info_qui_varie_selon_le_poste] contient-il des espaces ou des caractères spéciaux (en particulier "=" ou ":") ? /SERVER: est une partie constante ?

Existe t-il d'autres lignes dans le fichier contenant /SERVER: ou Serveur= ?

Si c'est possible, peux-tu poster un exemple de fichier ? Pour faire un code ça serait vraiment pratique.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2011 à 15:37:37

Bonjour, et désolé du retard :euh:

Voici un exemple de fichier à modifier :

Fichier service.ini :
[OCS_SERVICE]
Server=192.168.9.245
Pnum=80
NoProxy=1
Miscellaneous=/HKCU  /TAG:"Pret" /SERVER:192.168.9.245 /PNUM:80 /NP /DEBUG
auth_user=none
auth_pwd=none
PROLOG_FREQ=999
OLD_PROLOG_FREQ=999
TTO_WAIT=3424140


Les lignes à modifier sont
Server=192.168.9.245
et
Miscellaneous=/HKCU /TAG:"Pret" /SERVER:192.168.9.245 /PNUM:80 /NP /DEBUG
En fait la seule donnée que je souhaite conserver c'est ce qui suit le /TAG: (ici "Pret"), c'est ce qui m'empèche de recréé un seul fichier pour tous les postes.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2011 à 17:16:46

Je vais regarder ça ce soir.

Edit : Encore une question, je suis entrain de me pencher sur ton fichier. La première partie est faite (changement de l'IP après le premier Server=...) mais je ne comprend pas bien ce que tu souhaite gardé dans la ligne Miscellaneous=/HKCU /TAG:"Pret" /SERVER:192.168.9.245 /PNUM:80 /NP /DEBUG. Tu veux aussi changer l'IP après le SERVER ?

Edit 2 : Peut être ça :
set IP=changement
set file=
set tempFile=tempConfigService.ini
for /f "tokens=1,2 delims==" %%I in ('type "%file%"') do (
if %%I==Server (echo %%I=%IP%>>"%tempFile%") else if %%I==Miscellaneous (echo %%I=/HKCU  /TAG:"Pret" /SERVER:%IP% /PNUM:80 /NP /DEBUG>>"%tempFile%") else (echo %%I=%%J>>"%tempFile%")
)
del /f /q "%file%"
ren "%tempFile%" "%File%"

Si %file% et %tempFile% ne sont pas dans le même lecteur, le renommage ne marchera pas.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2011 à 19:34:11

La ligne
Miscellaneous=/HKCU /TAG:"Pret" /SERVER:192.168.9.245 /PNUM:80 /NP /DEBUG
doit devenir
Miscellaneous=/HKCU /TAG:"Pret" /SERVER:NOUVELLE_IP /PNUM:80 /NP /DEBUG
(en fait la ligne générale est
Miscellaneous=/HKCU /TAG:"TAG" /SERVER:IP /PNUM:80 /NP /DEBUG
avec TAG variable selon le poste (à conserver) et IP à remplacer avec la nouvelle IP)

En fait je viens de trouver une solution à mon problème (en contournant le script) donc je n'ai plus besoin de ça (même si j'avoue être curieux malgré tout)

Merci beaucoup pour l'aide =D
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2011 à 19:36:36

Bah ... le code posté ci-dessus fonctionne alors.
  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2011 à 19:57:06

Merci je testerai demain au boulot pour voir ;)
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2013 à 13:51:47

Bonjour à tous,

Je déterre ce topic, mais j'essaye de faire quelque chose un petit peux similaire et je n'arrive pas à en venir à bout !

Voici mon code :

@echo off

set file=test.txt
set search=pref("network.automatic-ntlm-auth.trusted-uris", "10.10.10.10");
echo %search%
For /f "tokens=*" %%a In (test.txt) do (
	if %%I==%search% (echo trouve) else (echo nok)
)
pause

Voici le fichier test.txt

trusted-uris pref for negotiate authentication.
pref("network.automatic-ntlm-auth.trusted-uris", "10.10.10.10"); test This= preference controls whether or not the LM hash will be included in


Ici , mon code plante (je n'arrive même pas à la "pause" est-ce à cause de guillement dans la variable %search% ??

Comment résoudre mon problème ?

Car si je met:

set search=test

cela fonctionne très bien!

Merci pour votre aide!

  • Partager sur Facebook
  • Partager sur Twitter
21 août 2013 à 13:54:49

Oup's dans le fichier test.txt le <br> devrait être un saut de ligne en réalité, mais j'arrive pas à modifier ma réponse ...
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2013 à 13:56:04

et ce n'est pas

if %%I== ....

mais if %%a== ...    !!!

  • Partager sur Facebook
  • Partager sur Twitter
21 janvier 2018 à 13:52:12

Bis Bonjour à tous

je déterre aussi car pas de réponse ou d'aide nulle par

j ai ma commande à appliquer à tous les fichiers .jnx

d'un dossier qui les converti en .img via ...

dir C:\Maps\jnx2img\
jnx2img.cmd c:\Maps\test_map.jnx c:\Maps\test_map.img

mais rien à faire pour tout le dossier ...

rien ne fonctionne

jnx2img.cmd c:\Maps\%%I.jnx c:\Maps\%%I.img  
set /A NN=NN+1





  • Partager sur Facebook
  • Partager sur Twitter
21 janvier 2018 à 21:53:47

Bonjour,

plutôt que de déterrer (de nouveau !), crée un nouveau sujet dédié à ton problème.

Je ferme ici.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)