Bonjour à tous,
voici mon problème :
Je demande à l'utilisateur une saisie :
Ici l'utilisateur a la possibilité d'entrer ce qu'il veut bien sur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ECHO Votre choix : SET SAISIE /p=""
Le but est de le faire entrer un masque de fichier :
Toutefois je dois controler qu'il n'entre pas*.csv
toto.*
*a.tmp
...
ça fonctionne en vérifiant avec*.*
Mon soucis est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 IF "%SAISIE%"=="*.*" ( CLS ECHO Saisir "%SAISIE%" c'est le mal ! PAUSE )
Si l'utilisateur entre **.* (ou *.** ou ******.*, etc), ça donne le même masque que *.*.
J'ai donc essayé de traiter la saisie avant vérification en remplaçant ** par *, mais je n'y arrive pas.
J'ai testé :
Rien n'y fait, ça ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SET SAISIE=%SAISIE:**=*% SET SAISIE=%SAISIE:\*\*=\*% SET SAISIE=%SAISIE:\*\*=*% SET SAISIE=%SAISIE:**=\*% ...
J'avais aussi essayé de controler via une expression régulière avec une syntaxe du genre :
Puis en controlant ERRORLEVEL, mais ça ne semble pas fonctionner (ERRORLEVEL=1 dans tous les cas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part ECHO "%SAISIE%"|FINDSTR /r "^[*]*[.][*]*$">nul
Est-ce que mon expression régulière était mauvaise ?
Visiblement non, en la testant ici ça passe.
Est-ce que ma syntaxe était fausse ?
Je pencherais plutôt vers ça.
Je vous remercie d'avance pour votre aide
EDIT :
Expression régulière fonctionne :
Je ne suis pas encore totalement habitué au MS-DOS et j'avais un peu omis le fait qu'il compte mes " comme faisant partie de ma chaine de caractères ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ECHO "%SAISIE%"|FINDSTR /r "^[\"][*]*[.][*]*[\"]$">nul
Je vais utiliser cette solution qui est en plus plus propre et marquer le sujet comme résolu, mais j'aimerais tout de même savoir comment faire pour remplacer des * dans une chaine si quelqu'un passe par là.
Partager