rempacler une chaine de caractere dans un fichier [batch dos] - Shell/Batch - Programmation
Marsh Posté le 10-07-2003 à 21:41:42
ReplyMarsh 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
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...
Marsh Posté le 11-07-2003 à 14:59:29
merci beaucoup
tu me sauves la vie
c est chiant les fichiers csv
je te montrerais mon bat à la fin si tu veux un truc de dingue
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
Marsh Posté le 05-08-2006 à 14:51:12
sbucci2 a écrit : merci beaucoup |
Je veut bien voir moi
Marsh Posté le 05-08-2006 à 15:24:25
mais par pitié, arrétez d'utiliser le batch en 2006
en python par exemple, ce truc prend une ligne
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
Marsh Posté le 05-08-2006 à 16:03:09
webding a écrit : |
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 )
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 :
|
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
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
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é ?
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/
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
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:;;;=;%
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. |
peux tu donner un exemple complet s'il te plait ?
Marsh Posté le 24-09-2006 à 11:11:35
payes a écrit : |
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 : |
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 : |
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 : |
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.
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...
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...
Marsh Posté le 26-09-2006 à 15:10:05
wackevat a écrit : Essaie l'option usebackq. |
Ca marche !!!
Merci beaucoup
Ma conclusion :
le bon vieux dos a encore des ressources , 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/)
Marsh Posté le 28-09-2006 à 20:47:10
profiler42 a écrit : Ma conclusion : |
La conclusion est fausse !
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.
Marsh Posté le 02-10-2006 à 14:04:56
wackevat a écrit : La conclusion est fausse ! |
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 (J'ai commencé avec dos 6.2)
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) |
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.
@+
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
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 :
|
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!!
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