.bat afficher une seule fois le nom

M Dupond -  
 M Dupond -
Bonjour,
J'ai créé un fichier .bat qui quand il est exécuter, m'affiche le 6eme bloc de chaque ligne.

set i=-1
for /f "tokens=6" %%a in ('more ^< test.txt') do (
set/a i+=1
echo/%%a
)

J'obtiens comme résultat :
toto,
titi,
toto,
tata,

Mon soucis c'est que je ne veux pas que la virgule apparaisse mais je n'arrive pas à la supprimer. De plus je n'arrive pas à afficher seulement une fois toto.

Merci
Configuration: Windows XP
Firefox 3.0.6

17 réponses

  1. NTeeN Messages postés 288 Date d'inscription   Statut Membre Dernière intervention   14
     
    Il y a quoi dans ton fichier test.txt ?
    0
  2. M Dupond
     
    Group = toto, nom = toto, ville = paris
    Group = titi, nom = titi, ville = lille
    Group = toto, nom = toto, ville = paris
    Group = tata, nom = tata, ville = toulouse
    0
  3. NTeeN Messages postés 288 Date d'inscription   Statut Membre Dernière intervention   14
     
    malheureusement la virgule fait partie du bloc, il faut améliorer ton script pour lui dire de ne pas copier le caractère "," et de ne pas afficher les doublons (pour le toto...). je ne suis pas assez calé en bat pour te le faire, je me renseigne et si je trouve je reviendrai voir si personne n'a donné la soluce.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. M Dupond
     
    Oui je sais bien qu'il faut améliorer mon script, c'est pour ça que je viens içi, si il faisait tout ce que je veux, je ne demanderais pas :)
    Mais malheureusement je n'arrive pas à le faire.
    SI tu trouves comment faire, je te remercie d'avance pour ton aide.
    0
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    changer de delimiteur

    $ type aa.bat
    @echo off
    set i=-1
    for /f "tokens=4 delims==," %%a in ('type test.txt') do (
    set/a i+=1
    echo/%%a
    )
    $ aa
    toto
    titi
    toto
    tata
    0
  7. kimojo Messages postés 402 Statut Membre 41
     
    Ouep le delims fait bien ce que tu cherches
    0
  8. M Dupond
     
    Merci ça fonctionne.
    J'avais déja essayer mais avec delims=, au lieu de delim==,
    Il y a un truc que je ne comprend pas par contre.
    Pourquoi quand on met
    tokens=4 delims==,
    Les 2 égales ne sont pas pris en compte, c'est à dire qu'avec token=4 j'obtiens bien les noms.

    Mais quand on met juste
    tokens=4
    Il faut prendre en compte les 2 égales,c'est à dire qu'on obtient le mot nom.

    J'ai l'impression que ce n'est pas clair ce que je dis donc exemple :)

    $ type aa.bat
    @echo off
    set i=-1
    for /f "tokens=4 delims==," %%a in ('type test.txt') do (
    set/a i+=1
    echo/%%a
    )
    $ aa
    toto
    titi
    toto
    tata

    $ type aa.bat
    @echo off
    set i=-1
    for /f "tokens=4," %%a in ('type test.txt') do (
    set/a i+=1
    echo/%%a
    )
    $ aa
    nom
    nom
    nom
    nom

    Et tu coup il faut mettre token 6 et donner au 2 égales un peu sur dans la ligne, un token.

    $ type aa.bat
    @echo off
    set i=-1
    for /f "tokens=6," %%a in ('type test.txt') do (
    set/a i+=1
    echo/%%a
    )
    $ aa
    toto,
    titi,
    toto,
    tata,

    Je chipote puisque ton système fonctionne mais c'est pour bien comprendre.

    Sinon pour l'autre partie de ma question, c'est à dire de supprimer le doublon toto.

    Merci
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    le premier = fait partie de delims : delims=<séparateur><séparateur>
    help for
    delims=xxx - spécifie un ensemble de délimiteurs. Ceci remplace
    l'ensemble de délimiteurs par défaut qui sont
    l'espace et la tabulation.

    ah oui le doublon, je n'avais pas fait attention
    0
  10. M Dupond
     
    J'ai un petit soucis. A partir de ton lien, je peux télécharger 2 fichiers.
    UnxUtils.zip et UnxUtilsSrc.zip
    Le UnxUtilsSrc.zip, j'ai pleins de dossier dedans mais pas de uniq.
    J'ai donc pri le UnxUtils.zip pour i386. Je ne sais pas si c'est comptatible.
    En fouillant dans les dossiers j'ai un uniq içi \UnxUtils\usr\local\wbin
    Cependant quand je l'exécute la fenêtre dos s'ouvre mais avec rien dedans :/
    En gros je ne sais pas trop comment l'installer.

    C'est dommage que tu saches pas faire juste en commande dos car je pense qu'il y aurait eu un if et du coup j'aurais pu rajouter des choses que j'aimerais faire a chaque fois qu'il trouve un doublon :/
    0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    il faut juste récupérer uniq.exe dans \UnxUtils\usr\local\wbin
    je vais regarder en DOS
    0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    essaye ca

    $ aa|sort > z1
    $ type z1
    tata
    titi
    toto
    toto
    $ bb
    $ type z2
    tata
    titi
    toto
    $ type bb.bat
    @echo off

    set dest=z2
    copy /Y NUL %dest% > NUL
    for /F %%n in ('type z1') do (
    findstr %%n %dest% > NUL
    if errorlevel 1 echo %%n >> %dest%
    )
    0
  13. M Dupond
     
    ça marche niquel. Il faudrait que je vois demain si c'est possible que je l'intègre à l'autre fichier .bat plutot que j'ai 2 fichiers différent.

    En tout cas un grand merci
    0
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    j'ai fait un autre bat pour tester, mais ca devrait se mélanger sans problème, le sort n'est utile que si on utilise la commande uniq

    $ type f1.txt
    Group = toto, nom = toto, ville = paris
    Group = titi, nom = titi, ville = lille
    Group = toto, nom = toto, ville = paris
    Group = tata, nom = tata, ville = toulouse

    $ type bb.bat
    @echo off

    copy /Y NUL z1 > NUL
    set i=-1
    for /f "tokens=4 delims==," %%a in ('type f1.txt') do (
    set/a i+=1
    echo/%%a >> z1)

    set dest=z2
    copy /Y NUL %dest% > NUL
    for /F %%n in ('type z1') do (
    findstr %%n %dest% > NUL
    if errorlevel 1 echo %%n >> %dest%)
    type z2

    $ bb
    toto
    titi
    tata

    0