Modifier une ligne d'un fichier et la remplacer

Modifier une ligne d'un fichier et la remplacer - Shell/Batch - Programmation

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 :

Citation :


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

Reply

Marsh Posté le 31-01-2006 à 19:53:08   

Reply

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.

Reply

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  :p
 
J'ai essayer ca

Citation :


echo Choissisez le nom du nouveau repertoire :
echo.
set /p newrep=
 
for /F "skip=4 tokens=a-z*" IN (ftp.ftp) do echo %%newrep>ftp.ftp


Mais ca marche pas .. ( je m'en doutais un peu  :p )
J'ai lu l'aide de For .. ca m'a pas aider beaucoup .. :d
 

Reply

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 :)

Reply

Marsh Posté le 01-02-2006 à 08:50:57    

Pour afficher le fichier, je sais faire :

Citation :


type ftp.ftp


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.

Reply

Marsh Posté le 01-02-2006 à 09:53:40    

Bon, j'ai trouvé comment "selectionner" les variables a modifier ..

Citation :


echo Choissisez le nom du nouveau repertoire :
echo.
set /p newrep=
 
for /f "eol=p skip=4 tokens=2" %%a IN (ftp.ftp) do (
echo %%a
pause
echo %newrep%>>ftp.ftp
)


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

Reply

Marsh Posté le 01-02-2006 à 09:56:03    

echo mkd %newrep%  ;)

Reply

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

Reply

Marsh Posté le 01-02-2006 à 10:29:58    

Tu dois sortir de la boucle une fois la ligne est trouvée.

Reply

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

Reply

Marsh Posté le 01-02-2006 à 10:38:34   

Reply

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

Reply

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

Reply

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 :((

Reply

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 :
echo.
set /p newrep=
 
for /f "tokens=1,2,3" %%a IN (ftp.ftp) Do (
if %%a==mkd  echo %%a %newrep%>>ftpnew.ftp
if %%a==cd echo %%a %newrep%>>ftpnew.ftp
if NOT %%a==mkd echo %%a %%b>>ftpnew.ftp
)
Rem del ftp.ftp
Rem ren ftpnew.ftp ftp.ftp
pause
goto...


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

Reply

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.

Reply

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 :
echo.
set /p newrep=
 
for /f "tokens=1,2,3" %%a IN (ftp.ftp) if (
%%a==mkd echo %%a %newrep%>>ftpnew.ftp
) else (
%%a==cd echo %%a %newrep%>>ftpnew.ftp
) else (
echo %%a %%b>>ftpnew.ftp
)
Rem del ftp.ftp
Rem ren ftpnew.ftp ftp.ftp
pause
goto lancer_ftp


 
ca ne marche pas du tout

Reply

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
)


Message édité par wackevat le 01-02-2006 à 16:01:43
Reply

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 :
echo.
set /p newrep=
 
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)
)


Je suis en batch, sous Xp

Reply

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
)

Reply

Marsh Posté le 01-02-2006 à 18:33:17    

Eureka !!!!
 
j'ai trouvé  :p
 
(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 .. ;)
 

Reply

Marsh Posté le 01-02-2006 à 19:11:18    

amazona_oratrix a écrit :

Eureka !!!!
 
j'ai trouvé  :p
 
(quote]date /t > temp.txt
del temp.txt
 
time /t > temp.txt
del temp.txt


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.

Reply

Marsh Posté le 01-02-2006 à 21:38:50    

Ok, j'ai modifier mon truc  :p
 
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 :(

Reply

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)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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