Aller au contenu

[Resolu]Batch-Rplacer chaine de carac ds 1 fichier


Messages recommandés

Salut à tous,

Je finis par me tourner vers vous, vu le temps que j'ai passé sur ce script en lisant de nombreux tuto, en tentant de trouver la réponse à travers différents forums...bref en vain !

Pourtant le besoin et relativement simple :transpi:

Pour le bon fonctionnement d'une application, je souhaite que l'utilisateur double clic sur le .bat ce qui vient éditer un fichier de configuration (toto.ini) pour modifier la ligne contenant :

Machine:Username="Spectateur" par Machine:Username="%username%"

Puis enregistre le fichier de configuration (toto.ini si possible à la même place) et lance l'exécutable.

Durant mes différentes recherches j'ai bien vu que l'on pouvait éditer une variable très facilement, mais je n'ai pas du tout compris comment éditer un fichier. (pas d'équivalent à sed :craint: )

Auriez-vous l'amabilité de m'aiguiller, je vous remercie par avance cher tous :D

Dites moi si vous avez besoins de plus de détails.

(Je ne suis pas contre du vbs, mais vu le temps que j'ai passé en batch j'aimerai bien comprendre en batch, mais je ne vais pas faire la fine bouche si vous me proposez la solution en vbs, l'idée est surtout de ne pas utiliser d'outil tiers)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

C'est une astuce, mais qui permet peut-être de régler ton problème :

tu peux partir d'un fichier ini template sans la définition de la variable et y concaténer la définition de la variable

copy template.ini toto.ini
echo "Username=\"%username%\"" >> toto.ini

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse, cela me fait une astuce en plus dans mon bagage :transpi:

Par contre l'avantage est que je peux ajouter ce que je souhaite en fin de fichier, mais j'ai besoin de supprimer la ligne où se trouve le précédent nom.

Également le fichier .ini n'est pas généré par moi mais une application et je sais que ce fichier contient forcément la ligne

Machine:Username="Spectateur"

En plus cette ligne est unique et n'a pas vocation à être changée, alors que ça place dans le fichier peut (peut-être) elle changer (actuellement en ligne 105 sinon).

Si possible on peut simplement partir sur le fait de changer Spectateur, qui lui aussi est seul.

Lien vers le commentaire
Partager sur d’autres sites

Il faut parser ton fichier avec une boucle FOR. Je te mets en gros ce qu'il faut faire.

@echo off
SET input=test.ini
SET output=out.ini

:: Cette boucle FOR permet de récupérer les lignes de la forme %%a=%%b ou %%a
:: Ex: la ligne toto=value sera parsée en %%a="toto" et %%b="value"
::	 la ligne [TEST] sera parsée en %%a="[TEST]" et %%b=""
FOR /F "tokens=1,* delims==" %%a IN (%input%) DO (
IF "%%b"=="" (
	:: cas où il n'y a pas de = dans la ligne, on renvoie le premier token
	echo %%a >> %output%
) ELSE (
	IF "%%a"=="toto" (
		:: cas toto=truc : on remplace par toto=ce qu'on veut
		echo %%a=newtoto >> %output%
	) ELSE  (
		:: autres cas bidule=machin, on réécrit bidule=machin
		echo %%a=%%b >> %output%
	)
)
)

Lien vers le commentaire
Partager sur d’autres sites

Un grand merci, si avec ça j'arrive pas à finir mon besoin, je vais être la risée du monde info :transpi:

Je posterai tout de même la solution qui convient à mon besoin, si ça peut mâcher le boulot à quelqu'un d'autres.

Merci pour ton aide et bonne fin de journée.

Comme promis voici la solution à mon besoin (enfin surtout grâce aux bonnes pistes ou plutôt travail pratiquement tout mâché de IFRIC4).

@echo off

SET input=test.ini

SET output=out.ini

FOR /F "tokens=1,*" %%a IN (%input%) DO (

::si la ligne de mon fichier test.ini est égale à Machine:Username="Spectateur"

:: alors je la remplace par une nouvelle ligne incluant l'utilisateur de la session actuelle

IF "%%a"=="Machine:Username="Spectateur"" (

echo Machine:Username="%username%" >> %output%

::sinon je continue de remplir mon nouveau fichier avec les même valeurs

) ELSE (

echo %%a >> %output%

)

)

:: je supprime mon fichier d'origine

del /Q test.ini

:: je renomme mon nouveau fichier avec le nom de l'ancien

ren out.ini test.ini

::je démarre mon application

start monappli.exe

Voilà, j'espère que ce script pourra aider ou en inspirer certains.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...