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 ??
 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.
 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