Modifier une ligne d'un fichier et la remplacer - Shell/Batch - Programmation
Marsh Posté le 31-01-2006 à 22:23:02
Oui, possible.
Tu fais une boucle for pour lire ligne par ligne (recherche sur ce forum - des centaines d'exemples) puis vérifies si les deux ou trois premières lettres sont xy(z) alors tu remplaces toute la ligne par le nouveau texte.
Marsh Posté le 31-01-2006 à 23:36:19
Salut !
J'ai lu pas mal de truc sur ce forum .. mais pas ce dont j'ai besoin ..
Je suis pas doué du tout.. sauf pour le copier coller
J'ai essayer ca
Citation : |
Mais ca marche pas .. ( je m'en doutais un peu )
J'ai lu l'aide de For .. ca m'a pas aider beaucoup ..
Marsh Posté le 31-01-2006 à 23:53:50
Il faut chercher d'abord à afficher ligne par ligne un fichier. On verra ensemble pour la suite
Marsh Posté le 01-02-2006 à 08:50:57
Pour afficher le fichier, je sais faire :
Citation : |
Mais ca affiche tout ..
Dans la commande FOR, j'ai vu que skip allait "sauter" les X premieres lignes.
ca tombe bien, car ce que je veut modifier n'est JAMAIS dans les 4 premieres lignes, mais seulement ce qui est apres PWD de CD de la ligne 5 et 7.
Marsh Posté le 01-02-2006 à 09:53:40
Bon, j'ai trouvé comment "selectionner" les variables a modifier ..
Citation : |
MAIS .. %newrep% se met a la fin, et non pas a la place ..
Comment faire pour lui expliquer de REMPLACER ce qu'il a selectionner ??
Marsh Posté le 01-02-2006 à 10:17:07
non, ca marche pas
et si je fait echo %newrep%>>ftp.ftp ca l'ecrit a la fin du fichier
pas a la place de ..
Marsh Posté le 01-02-2006 à 10:29:58
Tu dois sortir de la boucle une fois la ligne est trouvée.
Marsh Posté le 01-02-2006 à 10:38:34
je veux bien .. mais comment ??
Je sais pas faire ca ..
J'ai donc compris que la variable %%a et %%b etc.. sont les "truc" a remplacer
donc on va se faire un
var%%a=%newrep%
var%%b=%newrep%
et???
Marsh Posté le 01-02-2006 à 10:43:26
Tu as la commande goto
for blabla (
blabla
echo %newrep% blabla
goto sortie
)
:sortie
Pour %%a %%b tu as compris mais fais attention au tokens=
Quand tu mets tokens=2, tu ignores le premier donc %%a=2è token et donc si tokens il n'y en a que 2, %%b=vide
Marsh Posté le 01-02-2006 à 11:01:00
ce que je n'arrive pas a comprendre et faire, c'est REMPLACER .
ca ajoute toujours a la fin, et non pas a la place de ..
J'ai un goto a la fin
Marsh Posté le 01-02-2006 à 12:51:19
J'avais pas vu la fin de ton message ..
pour les tokens, j'ai compris .
et c'est bien le 2eme blok que je veut modifier
mais j'y arrive pas (
Marsh Posté le 01-02-2006 à 14:05:50
Bon, j'ai progresser en "reconstruisant le fichier ...
j'ai fait :
Citation : echo Choisissez le nom du nouveau repertoire : |
Mais ca bloque a la ligne qui commence par "cd" . elle est en double ..
normal, car a la premiere boucle il l'ecrit .. comment faire pour dire :
si %%a==mkd OU cd echo ..
j'ai essayer les pipes | ca marche pas
la virgule non plus
OR non plus
.. y'a t'o un truc "ou" ??? en dos ??
Marsh Posté le 01-02-2006 à 14:22:58
Tu as else :
if blabla (
fais_ceci
) else (
fais_cela
)
Sinon, effectivement, tu dois reconstruire la ligne. Il n'y a pas de Remplacement possible proprement dit.
Pour ton goto, ce n'est pas exactement ce que je voulais dire. Un goto à la fin comme ça, ça n'a plus rien à voir avec la première partie alors qu'un goto dans la boucle permet de sortir de celle-ci.
Marsh Posté le 01-02-2006 à 15:36:28
mon goto est "bon " il renvoi vers une etiquette
j'ai essayé else sous differente forme, et je trouve pas de doc sur else en batch ..
Citation : echo Choisissez le nom du nouveau repertoire : |
ca ne marche pas du tout
Marsh Posté le 01-02-2006 à 16:01:17
Je n'ai pas dit que ton goto n'était pas bon. J'ai juste dit qu'il n'avait pas à voir avec le problème en question (i.e. sortie de la boucle)
Tu t'es trompé sur la syntaxe du if else :
if "%%a" == "mkd" (
blabla
) else if "%%a" == "cd" (
blabla
) else (
blabla
)
Marsh Posté le 01-02-2006 à 16:12:29
Je viens d'essayer plein de synthaxe ..
mais il me dit qu'il connait pas else ..
Citation : echo Choisissez le nom du nouveau repertoire : |
Je suis en batch, sous Xp
Marsh Posté le 01-02-2006 à 16:28:34
Tu t'es trompé de syntaxe
Il faut que
else
soit à la même ligne que
)
Marsh Posté le 01-02-2006 à 18:33:17
Eureka !!!!
j'ai trouvé
(quote]date /t > temp.txt
FOR /F "tokens=1-4 delims=/ " %%i in (temp.txt) do (
set jour=%%i
set mois=%%j
set annee=%%k
)
del temp.txt
time /t > temp.txt
FOR /F "tokens=1-4 delims=: " %%l in (temp.txt) do (
set heure=%%l
set minute=%%m
)
del temp.txt
set newrep=%jour%-%mois%-%annee%_%heure%H%minute%
for /f "tokens=1,2,3" %%a IN (ftp.ftp) Do (
if %%a==mkd (
echo mkd %newrep%>>ftpnew.ftp
)else if %%a==cd (
echo mkd %newrep%>>ftpnew.ftp
) else (echo %%a %%b>>ftpnew.ftp
)
)
del ftp.ftp
ren ftpnew.ftp ftp.ftp
goto ftp_exist[/quote]
Pour ceux que ca interresserait voici le code pour modifier le repertoire des parametres FTP avec la date du jour et l'heure ..
Marsh Posté le 01-02-2006 à 19:11:18
amazona_oratrix a écrit : Eureka !!!! |
C'est... euh.. moche !
Déjà pas besoin de supprimer un fichier juste avant de faire un >
Sinon, tu as les variables DATE et TIME pour éconimiser les écritures sur disque.
Marsh Posté le 01-02-2006 à 21:38:50
Ok, j'ai modifier mon truc
Maintenant, dans ma boucle for, pour les tokens ou y'a rien sont il vide ou n'existe il pas ??
.. je m'enplique, sur une ligne, si j'ai :
toto mal genou
%%a sera ==toto
%%b==mal
%%c==genou
Mais si la ligne suivante j'ai que :
toto
%%b== vide ou n'existe pas ?
et comment ecrire
si %%b n'existe pas ?
ou
si %%b est vide ??
J'ai testé %%b=="" ca va pas
Marsh Posté le 01-02-2006 à 22:14:25
%%b est vide (ou n'existe pas si tu préfères)
Sinon, pour la vérif :
if "%%b" == ""
(cf. mon post à 16h01)
Marsh Posté le 31-01-2006 à 19:53:08
Salut !
Je cherche a faire en batch, une recherhce dans un fichier txt une certaine serie de caractere..
En fait, dans un fichier txt, j'ai les parametres de connections ftp du type :
ftpperso.free.fr
login
pass
pwd
PWD
mkd essai
pwd
cd essai
hash
Je veut modifier a l'aide d'un batch la partie en gras..
Je fait un set /P mod=
l'utilisateur va taper le nouveau nom de repertoire..
Le batch devra supprimer :
mkd essai
pwd
cd essai
et le remplacer par :
mkd %mod%
pwd
cd %mod%
A savoir que essai n'est pas "fixe" ..
est ce possible ????
Merci