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.
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:*.*.*.*
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à
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.
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.
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.
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)
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% ??
Pas d'aide concernant le code par MP, le forum est là pour ça :)