Batch lecture d'un fichier txt à l'envers

[Résolu/Fermé]
Signaler
-
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
-
Bonjour,

J'appelle à l'aide car je suis bloqué avec mon script batch.
Je souhaite afficher le 3eme mot de la 2eme ligne d'un fichier texte. Le voici :

Morarnligmirlas Mirlashall Liglomnirluscal
Hellles Norbyr Luggemborsel Morgum
Legurn Urnmer
Lashobornor Lomhell Ernlegbyrlogurn
Hebor Thigymthinorha

J'aimerais que mon script m'affiche le mot : Luggemborsel.
Pour cela voici mon script :

@echo off
set fichier=test.txt
for /f "skip=1 tokens=2 delims= " %%a in ('type "%fichier%"') do (
set ta=%%a
)
echo %ta%
pause
@exit

Le problème est que mon script m'affiche : Thigymthinorha !! Le dernier mot de la dernière ligne.
Si je change skip=2 ou skip=3 mon script m'affiche toujours le dernier mot.
Quelqu'un a une idée ?

Merci d'avance :)

3 réponses

Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
139
Salut,

Il y a trois problèmes dans ton code.

Le premier est qu'à voir, la commande
type %fichier%
ne transmet que la dernière ligne de ton fichier. Réparation : utiliser
%%a in (%fichier%) do (
cela permettra d'utiliser réellement toutes les lignes de ton fichier.

Ensuite, tu utilises
tokens=2
alors que ton mot est en 3e position (
Hellles=1 Norbyr=2 Luggemborsel=3 Morgum=4
). Réparation utiliser
for /f "skip=1 tokens=3 delims= "
.

Finalement, si tu
set ta=%%a
à chaque tour de boucle, ce ne sera que la dernière occurrence qui sera utilisée et donc
Ernlegbyrlogurn
. Réparation : initialiser la variable
ta
avec la valeur
x
et ne permettre son affectation à
%%a
que si elle vaut
x
avant.

Le code final :
@echo off

setlocal enableDelayedExpansion

set fichier=test.txt
set ta=x
for /f "skip=1 tokens=3 delims= " %%a in (%fichier%) do (	
if !ta!==x set ta=%%a
)
echo !ta!
pause

endlocal

exit


J'utilise le
setlocal enableDelayedExpansion
avec les
!
à la place des
%
pour pouvoir tester la variable en temps réél, car autrement je la testes après la boucle for et elle a changé entre-temps.

Bien à toi,


Bricomachin
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Un grand merci Bricomachin, ça fonctionne sans problèmes.
Merci aussi pour les explications :)
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
139
De rien, ça fait plaisir.

Pense à mettre ton sujet en résolu...

Bien à toi,


Bricomachin