Lister le contenu d’un fichier texte en batch
Sommaire
I. Présentation
Il peut parfois lors de la construction d’un batch être utile de lire /écrire les données dans un ou plusieurs fichiers textes. En batch, nous utilisons pour cela la commande FOR qui à la structure d'une boucle qui s’exécutera une fois par ligne.
II. Pour lister le contenu d’un fichier texte
La commande est la suivante :
FOR /F %%i in ('type Fichier_Lecture.txt') do echo %%i >> Fichier_Ecriture.txt
- /F signifie que nous travaillons sur un fichier (File)
- %%i est l’identifiant de la ligne ou de l’objet que nous voulons traiter
- In (‘type ’) . Tout ce qui suis la commande do sera répété suivant le nombre de ligne du fichier.
Dans cette commande, nous écrivons la ligne dans un autre fichier « Fichier_Ecriture.txt » avec la commande echo. La ligne que nous lisons est représentée là aussi par %%i
III. Avec plusieurs mots par ligne
La commande est sensiblement différente avec plusieurs objets par ligne. Par exemple si le fichier que nous lisons contient une syntaxe comme celle-ci :
Nom1,prenom1 Nom2,prenom2
Un objet est un nom ou un prénom (ici il y en a donc 4).
- Pour lire le fichier et distinguer chaque mot, il faut ajouter « token=1,2 ». C'est-à-dire que lors de la lecture d’une ligne, le programme distinguera 2 parties différentes.
- « delims= , » , nous précisons ensuite le délimiteur des parties dans une ligne, ici, une virgule.
- Lors du traitement des données, le premier mot sera donc %%i et le second %%j (un éventuel troisième sera %%k, etc..)
Nous aurons donc la syntaxe suivante :
FOR /F "tokens=1,2* delims=, " %%i in ('type Fichier_Lecture.txt') do echo %%i %%j >> Fichier_Ecriture.txt
Il est aussi possible de distinguer le caractère de fin de ligne en mettant un eol= avant le token.
Bonjour,
Très instructif comme explication.
Cependant, je voulais savoir s’il y avait moyen de mettre des mots en délimiteur ?
Je m’explique, j’aurais besoin de récupérer des morceau de chaîne qui sont dans le fichier, mais le morceau de chaîne en question est précédé d’un bout de chaîne qui le définit.
Ex : blablabla:?entity=SMT&user=SMN
Comment faire pour dire à l’ordinateur de me récupérer la chaine SMT dans une variable entity et SMN dans une variable SMN ?
Merci d’avance.
Bonne journée
Bonjour, votre démonstration ressemble à ma demande mais je ne parviens pas à l’adapter correctement afin d’obtenir ce que je souhaites.
Voici un exemple de syntaxe que j’obtiens :
klfrehferh.rer frejgie.re
raoult.dfkjfg ekjfhergh.ezr
Voici ce que je désir avoir :
klfrehferh.rer
frejgie.re
raoult.dfkjfg
ekjfhergh.ezr
Pourriez-vous me venir en aide.
Salut,
@ echo off
for /f « tokens=1,2 delims= » %%i in (‘type test3.txt’) do (
echo %%i
echo %%j
)
bonjour
je ne comprend pas ou est stocké le mot trouvé
pouriez vous eclairer ma lanterne
bonjour
Je cherche de l’aide pour mon petit projet.
j’ai récupéré un amstrad PPC640 avec un logiciel d’horoscope sur disquette
j’aimerai récupérer les données des fichiers pour refaire la meme chose sur windows
se sont des fichiers BAT qui sont lisibles mais crypté
esce possible ?
merci
Bonjour,
Merci pour votre cours.
une correction concernant le delimiteur :
En notant : FOR /F « tokens=1,2* delims=, » %%i in (‘type Fichier_Lecture.txt’) do echo %%i %%j >> Fichier_Ecriture.txt
le délimiteur défini est double : la virgule « , » et l’espace » »
pour n’avoir que la virgule il faut mettre :
FOR /F « tokens=1,2* delims=, » %%i in (‘type Fichier_Lecture.txt’) do echo %%i %%j >> Fichier_Ecriture.txt
j’ai rencontré le probleme lors de la manipulation de répertoire.
Parfait ce commentaire Cédric, merci.
j’étais en train de m’arracher les cheveux sur cette problématique.