Discussion:
expression régulière
(trop ancien pour répondre)
Serge Nazarian
2006-08-29 11:53:41 UTC
Permalink
Bonjour,

Je voudrait filtrer avec findstr les fichiers d'un répertoire dans un bat
nommé trouve.bat.
Ceux que je veux sont de la forme toto.1234..9.ext où 1234..9 est une suite
de chiffres (il y a au moins un chiffre).
Je fais donc : trouve toto
et trouve.bat contient
For /F "tokens=4" %%A in ('DIR ^| FINDSTR "%1.[0-9][0-9]*.ext" ') DO echo
"%%A"

mais ceci ne fonctionne pas car je ne veux pas récupérer les fichiers
toto.1234..9.ext.ext ou même toto.1234..9.ext1.ext mais uniquement
toto.1234..9.ext .
Comment procéder pour n'avoir que toto suivi d'un point, d'une suite non
vide de chiffres, d'un point et de ext ?

Merci pour toute aide.
Cordialement,
--
Serge Nazarian

Cliquez ci dessous pour une réponse personnelle :
http://cerbermail.com/?CBBJUUv0pN
Pascal Hambourg
2006-08-29 12:59:33 UTC
Permalink
Salut,
Post by Serge Nazarian
For /F "tokens=4" %%A in ('DIR ^| FINDSTR "%1.[0-9][0-9]*.ext" ') DO
echo "%%A"
mais ceci ne fonctionne pas car je ne veux pas récupérer les fichiers
toto.1234..9.ext.ext ou même toto.1234..9.ext1.ext mais uniquement
toto.1234..9.ext .
Comment procéder pour n'avoir que toto suivi d'un point, d'une suite non
vide de chiffres, d'un point et de ext ?
Ajoute $ (fin de ligne) à la fin de ton expression.
mdnews
2006-08-29 14:01:01 UTC
Permalink
Post by Serge Nazarian
Bonjour,
Je voudrait filtrer avec findstr les fichiers d'un répertoire dans un bat
nommé trouve.bat.
Ceux que je veux sont de la forme toto.1234..9.ext où 1234..9 est une suite
de chiffres (il y a au moins un chiffre).
[0-9]{1,} ou [0-9]+
Post by Serge Nazarian
Je fais donc : trouve toto
et trouve.bat contient
For /F "tokens=4" %%A in ('DIR ^| FINDSTR "%1.[0-9][0-9]*.ext" ') DO echo
"%%A"
En passant,
Mefie-toi du « . » (point) qui dans une Regex (hors []) ne signifie
pas "point", mais n'importe quel caractère.
C'est le "gag" classique de la regex qui en prend trop.

Petit exemple pratique

C:\>echo coucou.txt | findstr "coucou.txt"
coucou.txt
(d'accord mais c'est un des caractères possibles)

C:\>echo coucouXtxt | findstr "coucou.txt"
coucouXtxt
(la preuve, avec n'importe quoi ça marche aussi)

C:\>echo coucouXtxt | findstr "coucou\.txt"
(rien)
(là c'est bon, car ça ne correspond plus)

C:\>echo coucou.txt | findstr "coucou\.txt"
coucou.txt
(là c'est vrai)

C:\>

Donc penser à "escaper" les caratères spéciaux avec \

Voir aide findstr /?
--- extrait ----------------------------------------
Petit guide des options usuelles :
. Caractère joker = tout caractère
* Répétition : zéro occurrences ou plus du caractère ou de la
classe
précédents
^ Emplacement : début de ligne
$ Emplacement : fin de ligne
[classe] Classe de caractères : tout caractère du jeu
[^class] Classe inverse : tout caractère n'appartenant pas au jeu
[x-y] Limites : tout caractère dans les limites spécifiées
\x Échappement : utilisation littérale du métacaractère x
\<xyz Emplacement : début du mot
xyz\> Emplacement : fin du mot
-----------------------------------------------------

;-)
Serge Nazarian
2006-08-29 18:55:20 UTC
Permalink
Bonjour,

Voici ce qui marche parfaitement chez moi :
For /F "tokens=4" %%A in ('DIR ^| FINDSTR "%1\.[0-9][0-9]*\.ext$" ') DO
echo "%%A"

Cordialement,
--
Serge Nazarian

Cliquez ci dessous pour une réponse personnelle :
http://cerbermail.com/?CBBJUUv0pN
Loading...