.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
A voir également:

17 réponses

M Dupond
 
up
0
NTeeN Messages postés 288 Date d'inscription   Statut Membre Dernière intervention   14
 
Il y a quoi dans ton fichier test.txt ?
0
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
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
kimojo Messages postés 402 Statut Membre 41
 
Ouep le delims fait bien ce que tu cherches
0
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
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
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
M Dupond
 
Ok merci de l'explication.
0
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
pour les doublons, je ne vois pas trop en DOS, je te dirais de charger la commande Unix uniq pour DOS qui fait ca
https://sourceforge.net/projects/unxutils/files/unxutils/current/

$ aa|sort|uniq
tata
titi
toto
0
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
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
il faut juste récupérer uniq.exe dans \UnxUtils\usr\local\wbin
je vais regarder en DOS
0
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
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
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
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
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
M Dupond
 
Parfait

Merci pour ton aide.
0