[batch dos] rempacler une chaine de caractere dans un fichier

rempacler une chaine de caractere dans un fichier [batch dos] - Shell/Batch - Programmation

Marsh Posté le 10-07-2003 à 09:28:01    

bonjour, c 'est encore moi
 
je voudrais remplacer dans un fichier txt toutes les chaines ";;;" par ";" .
 
Je vois pas comment je pourrais faire.
 
merci

Reply

Marsh Posté le 10-07-2003 à 09:28:01   

Reply

Marsh Posté le 10-07-2003 à 10:06:10    

up

Reply

Marsh Posté le 10-07-2003 à 11:06:08    

[:denetrob]

Reply

Marsh Posté le 10-07-2003 à 21:41:42    

sbucci2 a écrit :


Je vois pas comment je pourrais faire.


Nous non plus. :cry:  
 [:yoyoz]

Reply

Marsh Posté le 11-07-2003 à 09:08:15    

j'ai des idées sur ce point, mais je n'ai pas encore finalisé.
Par contre ma solution (si j'y arrive) supprimera toutes les lignes vides du fichier texte...
 
C'est sur que la solution la plus simple serait de développer un petit programme en C...
 
A tout à l'heure

Reply

Marsh Posté le 11-07-2003 à 10:45:59    

j'y suis enfin arrivé :
il faut 2 fichiers batch :
on suppose que le fichier à modifier est toto.txt
 
le premier que j'ai appelé test1.bat :
del fichier2.txt
for /F "delims=" %%i in (toto.txt) do call rempl.bat "%%i"
type toto.txt
type fichier2.txt
del toto.txt
ren fichier2.txt toto.txt
echo c'est fini
 
le 2° s'appelle rempl.bat :
set toto=%1
rem on enlève le 1° et dernier caractère (les " )
set toto=%toto:~1,-1%
rem on remplace ;;; par ;
set toto=%toto:;;;=;%
echo %toto%>>fichier2.txt
 
 
à toi de remplacer dans le 1° fichier toto.txt par %1 si tu veux lancer le batch par test1 nom_de_fichier
évite elors les fichiers avec des espaces dans le nom...
 

Reply

Marsh Posté le 11-07-2003 à 14:59:29    

merci beaucoup  :jap:  
tu me sauves la vie
c est chiant les fichiers csv   :fou:  
 
je te montrerais mon bat à la fin si tu veux un truc de dingue :pt1cable:

Reply

Marsh Posté le 17-08-2003 à 17:56:40    

Sinon ya toutes les commandes unix pour windows qui existent, en particulier sed qui permettrait d'aller plus vite.
 
sed -e '1,$s/;;;/;/g' tonfichier > tonnouveaufichier

Reply

Marsh Posté le 05-08-2006 à 14:51:12    

sbucci2 a écrit :

merci beaucoup  :jap:  
tu me sauves la vie
c est chiant les fichiers csv   :fou:  
 
je te montrerais mon bat à la fin si tu veux un truc de dingue :pt1cable:


 
Je veut bien voir moi

Reply

Marsh Posté le 05-08-2006 à 15:24:25    

mais par pitié, arrétez d'utiliser le batch en 2006 [:psychokwak]
en python par exemple, ce truc prend une ligne


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-08-2006 à 15:24:25   

Reply

Marsh Posté le 05-08-2006 à 15:29:04    

J'ai pas le temps d'apprendre le python  
 
Moi je reste au batch, c'est beaucoup plus facile à programmer, de plus je ne suis pas programmeur, je fait juste des script batch pour mon pc, python c'est plutôt pour les programmeurs.
 
Toi silteplait, arrête de répondre juste pour dire que le batch c'est mor, on est bien sur le forum Shell et batch ici non ?
 
Et puis on est peu être en 2006, mais le dos de windows xp fait partie des années 2000.
 
Ne le prend pas mal, c'est juste qu'il y à toujours quelqu'un poour renier le batch quand je pose une question sur un batch, et j'en est un peu marre de toujours répéter, c'est pas grave, mais bon si vous n'aimez pas le batch, alors ignioer les poste sur le batch, et vous serez comtent  :)  
 
Si ça t'intérrésse il y a des forum spécial Python.
 
Cepandant, merci quand même pour la précision  :)  :)

Message cité 1 fois
Message édité par webding le 05-08-2006 à 15:34:54
Reply

Marsh Posté le 05-08-2006 à 16:03:09    

webding a écrit :


Toi silteplait, arrête de répondre juste pour dire que le batch c'est mor, on est bien sur le forum Shell et batch ici non ?


ok lol
je maintiens ma position : en 2006, utiliser le batch est aussi d'actualité que de monter un PC avec Windows 95. il y a des tas de langages de script très sympas qui sont apparus ces dernières années, qui permettent bien plus de choses que le batch et qui sont bien plus agréables.
le batch est très bien pour automatiser des lancements de logiciels par exemple, mais dans le sujet de ce topic, il est complètement inadapté. il faut arréter de penser qu'on peut tout faire en batch, ce n'est pas vrai (à moins de remplir le disque dur de tout un tas de commandes externes, super [:vague nocturne])
 
quant à l'argument "Python c'est pour les programmeurs", je le réfute : nul besoin d'etre programmeur pour apprendre comment remplacer un caractère comme un autre ! ok, si tu veux utiliser python comme simple langage de programmation, alors il faut effectivement etre programmeur. mais dans le cas de ce topic, c'est inutile, et je le prouve
 

Code :
  1. Src = open("c:\\in.txt","r" ) # on ouvre le fichier texte source
  2. Dest = open("c:\\out.txt","w" ) # on créé un autre fichier qui contiendra les modifications
  3. i=Src.read() # on stocke le contenu du fichier source dans la variable i (chaine de caractères)
  4. o=i.replace(";;;",";" ) # on remplace ";;;" par ";", le tout stocké dans la variable o
  5. Dest.write(o) # on écrit o dans le fichier destination
  6. Src.close() # et on ferme les fichiers
  7. Dest.close()


 
Voila ! 7 lignes ! C'est quand même autre chose que l'immonde bricolage à base de batch posté ici par JPA (que je félicite d'ailleurs pour son courage), et certainement plus lisible.
 
Vous avez des outils performants et gratuits, utilisez les donc [:kiki]


Message édité par Harkonnen le 05-08-2006 à 16:04:55

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-08-2006 à 16:05:49    

Et il faut les compiler les scripts python ?

Reply

Marsh Posté le 05-08-2006 à 16:06:52    

non justement, c'est là tout l'intéret des langages de script (Python, VBS et autres) : ils ne se compilent pas ! ils sont interprétés. une fois que le script est écrit, tu le sauvegardes et tu le lances en cliquant sur son icone


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-08-2006 à 16:14:26    

Bon ok, je testerais ce code ce soir, merci beaucoup  :)  
 
Une derniére question: Faut-il que j'installe quelquechose sur windows pour que les scripts python puisse tourné ?


Message édité par webding le 05-08-2006 à 16:15:09
Reply

Marsh Posté le 05-08-2006 à 16:20:37    

oui, faut installer Python : http://www.python.org/
télécharger ici : http://www.python.org/download/releases/2.4.3/


Message édité par Harkonnen le 05-08-2006 à 16:21:27

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-08-2006 à 16:23:39    

OK, merci, je testerais ça se soir

Reply

Marsh Posté le 11-08-2006 à 20:54:25    

lol encore une fois si cette rubrique est nommée "shell/batch" c'est pas  
 
pour rien :)
 
laisse les gens qui ont envie de programmer en batch programmer en  
 
batch , meme si le python est 30 fois mieux , 30 fois plus beau et plus  
 
pratique ...  
 
perso je viens pas sur les topics python pour dire aux programmeurs  
 
python qu'ils feraient beaucoup mieux d'aller apprendre le C tout  
 
simplement parceque ce language est plus puissant ou meme  
 
plus simple.  
 
je te remercie du soucis que tu portes a vouloir nous faciliter la vie ,  
 
mais comprend que les gens comme moi ( et breaucoup d'autre  
 
d'ailleurs ) qui ne veulent seulement que programmer des ptites choses  
 
n'aient pas envie de reaprendre un language ... perso ca fait environ  
 
2 , 3 ans que je bidouille de tout les cotés , je vais chercher sur des  
 
forums et des sites des infos , que j 'apprend a mon rythm , bien sur  
 
que j'aimerai connaitre d'autre language pour faire des ptin d'interfaces  
 
et des programme pas lourd et avec beaucoup plus de possibilité , mais  
 
comprend que pour ce que je fait , quand j'ai un projet je vais mettre 1  
 
mois a le faire , et meme si j'avais mis seulement deux semaines en  
 
python , il me faudrai au moins 1 a 1.5 ans pour atteindre le niveau que  
 
j'ai en batch. comprend donc dès lors que je prefere faire mon pti  
 
programme en batch , plutot qu'en python , meme si le python est  
 
genialissime par rapport au batch.
 
c est comme si , pour quelqu'un qui sur windows 95 n'utilise que la  
 
calculette , tu lui disait qu'il vaut mieux qu'il passe sur xp car il  
 
pourra faire beaucoup plus de truc , qu'xp est plus puissant ,  
 
plus stable ou autre ... au final le resultat est le meme , il aura toujours  
 
sa calculette :)
 
mais si tu veut vraiment convaincre les personnes qui ont des projets  
 
en programmation un peu mieux que ce qu'offre le batch ( meme si pour
 
moi c est amplement suffisant ) , fais donc un topic dans cette  
 
section intilulé " a tout ceux qui veulent se lancer en batch , x raison  
 
pour vous convaincre que le python est mieux !"
 
mais evite stp de venir sur tout les topic batch et de dire que le batch  
 
c est de la merde , que c est inutile et qui a 30 fois mieux , on le sait  
 
mais pour des raisons x ou y , on, prefere programmer en batch ...
 
fait ton topics , place tes arguments et ceux qui seront convaincu
 
c'est cool pour eux , mais evite de "flooder" sur les topic de ceux qui  
 
n'ont aucune  envie de changer de language :)
 
merci d'avance ;)
 
bonne soirer a tous ;)
 

Reply

Marsh Posté le 16-09-2006 à 23:17:40    

Au fait, pas la peine de vous casse la tronche avec des codes de malades.
 
Pour remplacer ";;;" par ";", suffit de faire ça :
 
set chaine=%chaine:;;;=;%

Reply

Marsh Posté le 22-09-2006 à 11:09:03    

Yoshitu a écrit :

Au fait, pas la peine de vous casse la tronche avec des codes de malades.
 
Pour remplacer ";;;" par ";", suffit de faire ça :
 
set chaine=%chaine:;;;=;%


 
peux tu donner un exemple complet s'il te plait ?

Reply

Marsh Posté le 24-09-2006 à 11:11:35    

payes a écrit :


laisse les gens qui ont envie de programmer en batch programmer en  
 
batch , meme si le python est 30 fois mieux , 30 fois plus beau et plus  
 
pratique ...  


le problème est que tout le monde a l'air de penser que batch est un langage de programmation, et donc lui demandent des choses que seul un langage de programmation sait correctement faire. au départ, batch est un langage de script permettant de lancer des commandes DOS par lot, et destiné à faciliter la vie des utilisateurs de MS DOS en regroupant dans un seul fichier plusieurs commandes, destinées à accomplir une tache bien précise.
mais quand je vois des topics dans lesquels l'auteur demande de remplacer une chaine de caractères, ou bien de modifier des clés de registre, alors je peux pas m'empécher de bondir... (surtout pour la base de registres, qui n'existait meme pas quand batch est sorti)
 
il est parfaitement possible de visser une vis en tapant dessus comme un malade avec un marteau, c'est pas pour ça que :
1) la vis sera correctement vissée
2) le marteau est l'outil idéal pour visser une vis
 

payes a écrit :


bien sur  
 
que j'aimerai connaitre d'autre language pour faire des ptin d'interfaces  
 
et des programme pas lourd et avec beaucoup plus de possibilité , mais  
 
comprend que pour ce que je fait , quand j'ai un projet je vais mettre 1  
 
mois a le faire , et meme si j'avais mis seulement deux semaines en  
 
python , il me faudrai au moins 1 a 1.5 ans pour atteindre le niveau que  
 
j'ai en batch. comprend donc dès lors que je prefere faire mon pti  
 
programme en batch , plutot qu'en python , meme si le python est  
 
genialissime par rapport au batch.


c'est là que vous ne comprenez rien... il faut pas un an et demi pour apprendre le Python, c'est justement la force de ce langage. pour ce que vous voulez faire (remplacer des chaines de caractères, lire des clés de registre, toutes ces choses simples). une semaine à 15 jours suffisent largement, pour un bénéfice retiré 100 fois supérieur, et la garantie d'un gain de temps considérable par la suite (ben oui, à force de demander au batch des trucs qu'il ne sait pas faire, et de poser la question sur des forums, d'attendre la réponse, etc... on finit par ne pas remarquer qu'on perd un temps fou alors que Python a déja tout ce qu'il faut pour accomplir toutes les taches que vous lui demandez de façon très simple)
 

payes a écrit :


c est comme si , pour quelqu'un qui sur windows 95 n'utilise que la  
 
calculette , tu lui disait qu'il vaut mieux qu'il passe sur xp car il  
 
pourra faire beaucoup plus de truc , qu'xp est plus puissant ,  
 
plus stable ou autre ... au final le resultat est le meme , il aura toujours  
 
sa calculette :)


et si cette personne demande à la calc de Win95 de lui tracer une courbe, mais que seul celle d'XP sait faire ça ? tu vas lui dire de patcher sa calculatrice dans tous les sens pour un résultat incertain, ou lui conseiller de gagner du temps et de passer à XP ?
 

payes a écrit :


mais si tu veut vraiment convaincre les personnes qui ont des projets  
 
en programmation un peu mieux que ce qu'offre le batch ( meme si pour
 
moi c est amplement suffisant ) , fais donc un topic dans cette  
 
section intilulé " a tout ceux qui veulent se lancer en batch , x raison  
 
pour vous convaincre que le python est mieux !"


pas le temps, et je trouve bien plus constructif de donner l'équivalent python de ce que les gens demandent en batch dans les topics concernés. le batch est une techologie (?) dépassée, créee pour un certain OS, et qui n'a plus aucune raison d'être utilisée en 2006 sauf pour automatiser des lancements de petites taches.


Message édité par Harkonnen le 24-09-2006 à 11:12:07

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-09-2006 à 12:20:17    

Dans mon cas je dois modifier une chaine de caractères (adresse IP) dans des fichiers présents sur une cinquantaine de PC utilisateurs (2000 et XP + serveur en 2000)
Ces fichiers, ont un seul point commun : leur extension .ws (la quantité et la structure du nom sont différents d'un poste à l'autre)
 
Je ne souhaite pas installer de soft sur chaque PC.
 
Comme tu l'as dit à un moment, le batch est un langage de sript, et c'est pourquoi je suis parti sur un batch pour faire cette petite modif répétitive.
Je bute uniquement sur un problème lié aux espaces dans le nom d'une variable. (techno DOS arriérée, je sais ;) )
 
 
Maintenant, je suis ouvert à toute suggestion, du moment que c'est simple à mettre en oeuvre.
 
Comment procéderais-tu pour mon cas :
 
Toujours avec Python ? (est il utilisable pour modifier des fichiers sur des postes distants ?)
ou par script ? (de quel type, VBS ?)
 
 
Dernière précision, je devrais quand même passer sur les postes, donc pas de déploiement nécessaire par GPO
>>>  je veux juste éviter d'avoir à bosser avec le bloc-note
 
 
Merci d'avance à tous ceux qui feront avancer mon Schmilblick de manière concrète, que ce soit en batch où en python...  :jap:  
 
 
 
A toutes fins utiles, voici la ligne de commande qui coince en batch (si la variable %fichier% contient un espace) :
 
for /f "delims=" %%i in (%fichier%) do (set ligne=%%i&&call :traitement)
j'ai essayé les guillemets sans succès...

Reply

Marsh Posté le 26-09-2006 à 12:29:44    

Essaie l'option usebackq.

Reply

Marsh Posté le 26-09-2006 à 15:10:05    

wackevat a écrit :

Essaie l'option usebackq.


Ca marche !!!
Merci beaucoup  :jap:
 
 
Ma conclusion :
le bon vieux dos a encore des ressources  :love: , donc faut pas l'écarter systématiquement...
 
d'un autre côté j'ai regardé le serpent dans les yeux, et je suis tenté d'approndir le sujet
(j'ai chargé un tutoriel trouvé ici : http://python.50webs.com/)

Reply

Marsh Posté le 28-09-2006 à 20:47:10    

profiler42 a écrit :

Ma conclusion :
le bon vieux dos a encore des ressources  :love:


La conclusion est fausse ! :D
 
Ce n'est pas du tout du (batch du) bon vieux DOS.
 
C'est du batch Windows.
 
Le batch DOS ne supporte pas autant d'options.

Reply

Marsh Posté le 02-10-2006 à 14:04:56    

wackevat a écrit :

La conclusion est fausse ! :D
 
Ce n'est pas du tout du (batch du) bon vieux DOS.
 
C'est du batch Windows.
 
Le batch DOS ne supporte pas autant d'options.


OUPS !!! : C'est vrai que c'est un abus de langage assez répandu, merci de m'avoir corrigé.
 
Je crois que je me suis laissé aller à un brin de nostalgie :sweat:  (J'ai commencé avec dos 6.2)

Reply

Marsh Posté le 29-04-2008 à 10:55:36    

profiler42 a écrit :

Dans mon cas je dois modifier une chaine de caractères (adresse IP) dans des fichiers présents sur une cinquantaine de PC utilisateurs (2000 et XP + serveur en 2000)
Ces fichiers, ont un seul point commun : leur extension .ws (la quantité et la structure du nom sont différents d'un poste à l'autre)
 
Je ne souhaite pas installer de soft sur chaque PC.
 
Comme tu l'as dit à un moment, le batch est un langage de sript, et c'est pourquoi je suis parti sur un batch pour faire cette petite modif répétitive.
Je bute uniquement sur un problème lié aux espaces dans le nom d'une variable. (techno DOS arriérée, je sais ;) )
 
 
Maintenant, je suis ouvert à toute suggestion, du moment que c'est simple à mettre en oeuvre.
 
Comment procéderais-tu pour mon cas :
 
Toujours avec Python ? (est il utilisable pour modifier des fichiers sur des postes distants ?)
ou par script ? (de quel type, VBS ?)
 
 
Dernière précision, je devrais quand même passer sur les postes, donc pas de déploiement nécessaire par GPO
>>>  je veux juste éviter d'avoir à bosser avec le bloc-note
 
 
Merci d'avance à tous ceux qui feront avancer mon Schmilblick de manière concrète, que ce soit en batch où en python...  :jap:  
 
 
 
A toutes fins utiles, voici la ligne de commande qui coince en batch (si la variable %fichier% contient un espace) :
 
for /f "delims=" %%i in (%fichier%) do (set ligne=%%i&&call :traitement)
j'ai essayé les guillemets sans succès...


 
Essaye :
 
for /f  "tokens=1,2* delims=," %%i in (fichier.txt)  do set var=%%i
 
Ceci indique que les champs (tokens) sont séparés par une virgule (delims) et tes espaces seront pris dans le champs.
@+

Reply

Marsh Posté le 16-09-2011 à 16:50:10    

Le souci ce pose lorsque tu n'as pas le choix, que tu dois forcément utiliser BATCH et que tu ne peux pas installer PYTHON ou PERL, ou autre... c'est mon cas, c'est super chiant, mais j'taff sur des Win2000 et Win2003 et lancement des scripts avec Dollar Universe


---------------
Leon
Reply

Marsh Posté le 12-10-2011 à 22:51:07    

Le soucis ne se pose pas le batch est un langage de programmation, mais pas pour les fainéants. Il est supporté nativement par les postes Win32 et cross-version. Ne nécessite aucune installation d'environnement pour s'exécuter. Il est donc déployable tel que. C'est exactement l'équivalent du shell (bourne ksh etc sous unix).
 
Voici le script qui remplace dans chaque ligne du fichier présenté en argument 1 ;;; par ; et écrit dans le fichier en argument 2.
 
Harkonen est hors sujet et fait du troll.
 

Code :
  1. @for /f %%s in (%1) do call :Remove "%%s" %2
  2. @goto :end
  3. :Remove
  4. set s=%1
  5. set s=%s:~1,-1%
  6. set f=%2
  7. set s=%s:;;;=;%
  8. echo %s% >>%f%
  9. :goto :eof
  10. :end


Message édité par stephHal le 12-10-2011 à 22:53:41
Reply

Marsh Posté le 13-01-2012 à 10:59:23    

@Stephal : ouais, enfin, supporté nativement pas Windows, t'as aussi le VBScript ou le JScript, qui permettent de faire des choses plus puissantes que le batch!! Le batch, ça reste quand même une sacré plaie...et pour faire des script KSH a coté, même si c'est "censé" être l'équivalent du schell, ça tellement plus limité et moins intuitif en possibilité....un simple sed sous unix permet de le faire en une ligne!!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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