Batch lecture d'un fichier txt à l'envers

Résolu
Gatio77 -  
bricomachin Messages postés 245 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. bricomachin Messages postés 245 Date d'inscription   Statut Membre Dernière intervention   134
     
    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
  2. Gatio77
     
    Un grand merci Bricomachin, ça fonctionne sans problèmes.
    Merci aussi pour les explications :)
    0
  3. bricomachin Messages postés 245 Date d'inscription   Statut Membre Dernière intervention   134
     
    De rien, ça fait plaisir.

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

    Bien à toi,

    Bricomachin
    0