questions sur fichier de commande sous XP

7 réponses
Avatar
Jean-Claude
Bonjour,

dans un fichier de commandes, je dois rajouter une partie permettant, dans
un fichier F, de remplacer toutes les occurrences X par Y.
1) Je peux le faire par vbscript et l'intégrer, mais ca me semble un peu
lourd.
2) J'ai essayé avec le vieil edlin.exe mais je n'arrive pas à insérer le ^Z
nécessaire :

echo 1,rXXX^ZYYY>%temp%\mutadata.cmd
echo w>>%temp%\mutadata.cmd
echo q>>%temp%\mutadata.cmd
edlin.exe F.txt < %temp%\mutadata.cmd

=> le fichier mutadata.cmd ne contient que le w et q

3) Je ne peux guère utiliser une boucle avec la commande for, car le fichier
en question peut contenir des caractères qui risquent de perturber
l'exécution des commandes : des parenthèses, des <ou > ...
4) Je ne cherche pas de programme à installer, uniquement les commandes
natives de XP.

Une réponse au point 2 ? Une autre idée ?
Merci bien.

Jean-Claude

7 réponses

Avatar
Jean-Claude BELLAMY
Le samedi 12/01/2013 17:43:09, Jean-Claude a écrit dans le message
<news:50f19214$0$1221$ ce qui suit :
Bonjour,

dans un fichier de commandes, je dois rajouter une partie permettant, dans un
fichier F, de remplacer toutes les occurrences X par Y.
1) Je peux le faire par vbscript et l'intégrer, mais ca me semble un peu
lourd.



Très souvent, à vouloir "éviter" VBS ou autre langage de script par
peur de lourdeur, on se complique tellement la vie avec perte d'un
temps précieux qu'on aurait mieux fait d'investir tout de suite dans un
micro-développement!

NB: je n'ai rien contre la ligne de commandes, je l'utilise abondamment
et j'en suis un fervent partisan, mais dans certains cas il faut savoir
reconnaître ses limites.


P.ex. dans ton cas, il existe en VBS la fonction "REPLACE", qui sert,
comme son nom l'indique, à remplacer une chaine par un autre, et MIEUX
ENCORE, j'ai conçu un script "REPLACE.VBS" qui agit directement sur un
ou plusieurs fichiers :

http://www.bellamyjc.fr/technique/vbs-exemples#replace



Script de remplacement d'une chaine de caractères
dans un ensemble de fichiers texte
JC BELLAMY © 2002
------------------------------------------
Syntaxe :
replace -a<ancienne> -n<nouvelle> -f<fichier> [-b<backup>] [-s]
replace /a<ancienne> /n<nouvelle> /f<fichier> [/b<backup>] [/s]
Paramètres obligatoires :
<ancienne> : chaine à remplacer
<nouvelle> : nouvelle chaine
<fichier> : nom du fichier, avec ou sans chemin
peut comporter les caractères génériques * et ?
On peut remplacer un caractère dans les chaînes par sa valeur
hexadécimale sous la forme xnn
Par exemple le guillemet " : x22
Paramètres facultatifs :
<backup>: : extension des fichiers de sauvegarde (par défaut
".bak")
(le "." initial est facultatif)
si ce commutateur est omis, il n'y a pas de backup
-c : remplacements sensibles à la casse
dans ce cas, on distingue majuscules et minuscules
-s : exploration des sous-dossiers requise
-r : les chaînes sont interprétées comme expressions
régulières
NB : les chaînes et nom de fichier sont à encadrer par des guillemets
s'ils comportent des espaces

Exemples :
replace /aEssai /nx22Testx22 -flisezmoi.txt -c -s -b$$$
remplace la chaine "Essai" par ""Test"" en respectant la casse
dans tous les fichiers de nom "lisezmoi.txt" situés dans le
dossier courant et les sous-dossiers et effectue un backup de
chaque fichier modifié en ajoutant à son nom l'extension .$$$

replace -a"array[0..255] of char" -nstring -f"g:mes
projetsdelphi*.pas"
remplace la chaine "array[0..255] of char" par "string"
dans tous les fichiers "*.pas" du dossier "g:mes projetsdelphi"

replace -a"(S+)(s+)(S+)(s+)(S+)(s+)(S+)(s+)(S+)(s+)(S+)"
-n"$1$2$11$6$7$8$9$10$3$4$5" -fm:textesignature.txt -r
permute les mots 11 et 3,4,5 (en tenant compte des espaces)
Ainsi le texte : "May The Force be with You"
devient : "May You be with The Force"


Et en ce qui concerne les expressions régulières :
http://www.bellamyjc.fr/vbsobj/vspropattern.html

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY
http://www.bellamyjc.fr ou http://www.bellamyjc.org
Avatar
Olivier Miakinen
Bonjour,

Le 13/01/2013 09:39, Jean-Claude BELLAMY a écrit :

Et en ce qui concerne les expressions régulières :
http://www.bellamyjc.fr/vbsobj/vspropattern.html



Il y a quelques imprécisions, par exemple dans les définitions de
*, + et ?, dans celle de b, et entre les trois définitions n,
num et n (sic), mais c'est bien de l'avoir en français.

J'ai une petite question malgré tout : les expressions rationnelles
dans VBS sont de type Perl ? PCRE ? Autre ? Avec limitations ? La
même chose que dans JavaScript ? (euh... ça fait plus d'une question,
désolé)

Je propose un suivi vers fr.comp.lang.regexp, mais ne pas hésiter
à rester sur fr.comp.os.ms-windows si c'est plus adapté.

Cordialement,
--
Olivier Miakinen
Avatar
les renardeaux
Magister dixit ; et dans l'article
<50f19214$0$1221$ du samedi 12/01/2013
provenant de Jean-Claude on a pu le lire, e.g. :
Bonjour,



Hello,

dans un fichier de commandes, je dois rajouter une partie permettant,
dans un fichier F, de remplacer toutes les occurrences X par Y.

3) Je ne peux guère utiliser une boucle avec la commande for, car le
fichier en question peut contenir des caractères qui risquent de
perturber l'exécution des commandes : des parenthèses, des <ou > ...
4) Je ne cherche pas de programme à installer, uniquement les
commandes natives de XP.
Une réponse au point 2 ? Une autre idée ?
Merci bien.



Et quelque chose du genre :

-------------------
setlocal ENABLEDELAYEDEXPANSION

for /f "tokens=* delims= " %%a in (chemin_mon_fichier_F) do (
set str=%%a
set str=!str:^X=^Y!
echo !str!>>chemin_mon_fichier_F_bis
)
move chemin_mon_fichier_F_bis chemin_mon_fichier_F

setlocal DISABLEDELAYEDEXPANSION
-------------------

ne foncionne pas ?

--
Nathalie & Michel
les petits renardeaux dans la clairière du CTV
Avatar
Jean-Claude
Bonsoir,

je suis d'accord sur le fait d'utiliser du vbs si besoin, mais je pose la
question, des fois qu'il y ait une astuce que je ne connais pas en ligne de
commande...

Bon, je ferai un petit vbs, merci !

Jean-Claude
tiens, un homonyme :-)
Avatar
Jean-Claude
Bonsoir,

peut-être mais comme indiqué, mon fichier peut contenir des caractères qui
risquent de ne pas plaire aux commandes en boucle,donc je cherchait autre
chose...

Jean-Claude
Avatar
les renardeaux
Magister dixit ; et dans l'article
<50f5b3ed$0$1413$ du mardi 15/01/2013
provenant de Jean-Claude on a pu le lire, e.g. :
Bonsoir,

peut-être mais comme indiqué, mon fichier peut contenir des
caractères qui risquent de ne pas plaire aux commandes en boucle,donc
je cherchait autre chose...

Jean-Claude



J'ai testé pour voir sur des (, >... On dirait que ça passe, mais...

--
Nathalie & Michel
les petits renardeaux dans la clairière du CTV
Avatar
les renardeaux
Magister dixit ; et dans l'article
<50f5b3ed$0$1413$ du mardi 15/01/2013
provenant de Jean-Claude on a pu le lire, e.g. :
Bonsoir,

peut-être mais comme indiqué, mon fichier peut contenir des
caractères qui risquent de ne pas plaire aux commandes en boucle,donc
je cherchait autre chose...



Un peu tard, mais... J'ai fouillé dans mes archives et y ai retyrouvé
l'excellent switch.exe qui ne craint pas les caractères 'spéciaux' et
qui a une ligne de commandeultra simple :

switch.exe mon_fichier "caractère_à_remplacer" "nouveau_caracère"

unpoint c'est tout (ne pas oublier les " encadrant les caractères.

Tu dois ouvoir le trouver encore sur le net, sinon je te le mail.

--
Nathalie & Michel
les petits renardeaux dans la clairière du CTV