| ||||||||
Petit astucien | Bonjour, quelqu’un pourrait-il me dire ce qui ne va pas dans cette commande :
echo voulez- vous faire un autre test (Y/N/F) ?
echo.
set /p rep=réponse ?
echo.
echo %rep%|FINDSTR /r ^[0-9]*>nul / / elle ne fonctionne pas.
if ERRORLEVEL 1 goto message
If NOT ERRORLEVEL 1 goto verif
Je tente tout simplement d’adapter le code d’extinction d’une machine contenu dans un fichier bat, j’ai des difficultés avec cette commande :
echo %rep%|FINDSTR /r [^0-9]*>nul
dans le fichier original c’est comme ça :
SET /P delai=dans combien de temps voulez-vous arrêter la machine ?
Echo %delai%|findstr /r ‟[^0-9]” > nul
If ERRORLEVEL 1 goto TempsValide
Echo erreur: vous devez saisir un entier valide
Echo.
If not ERRORLEVEL 1 goto Suite
Et comme explication il dit, je cite :
« Analysons ensemble la ligne 33 : echo %delai%|findstr /r "[^0-9]" > nul
Prenons la première partie : echo %delai%
Comme nous l'avons vu plus haut, echo sert tout simplement à afficher le contenu de la variable "delai".
Le caractère "|", appelé "pipe" ou "tube", que j'utilise, permet d'utiliser en tant qu'entrée de la commande findstr, le résultat de la commande echo, à savoir la saisie de l'utilisateur.
Passons à la deuxième partie, déjà plus compliquée : findstr /r "[^0-9]"
Nous n'avons pas encore vu cette commande (Findstr). Elle permet en fait de rechercher des chaînes de caractères dans un fichier ou tout autre chaine de caractères. Le résultat de la recherche est ensuite récupérable grâce à la variable système "ERRORLEVEL".
"[^0-9]" est une expression régulière. Le caractère ^ indique le début de la chaîne.
"0-9" indique qu'il faut pouvoir trouver dans la variable delai seulement des caractères compris entre 0 et 9.
La dernière partie : > nul
Elle permet grâce au caractère ">" de rediriger dans un fichier dont le nom est saisi à droite, le résultat récupéré à partir des commandes de gauche.
Ici, nous renvoyons le résultat vers le mot clé "nul", ce qui a pour effet de ne pas créer de fichier. La redirection du résultat permet d'annuler l'affichage de celui-ci sur votre fenêtre.
En clair, cette ligne 33 permet donc de vérifier que la saisie de l'utilisateur est bien un entier puis conserve le résultat de la recherche dans la variable ERRORLEVEL que nous utilisons juste après.»
Or dans l’aide de la commande FINDSTR il est bien dit que la regex [^0-9] est une classe inverse, par conséquent elle affiche tout caractère n’appartenant pas au jeu.
Quelqu’un peut-il m’expliquer ce que je dois comprendre ? | |||||||
Publicité | ||||||||
| ||||||||
Astucien ![]() | Bonjour, Sinon quelquechose comme çà ? @echo on | |||||||
Astucien ![]() | En fait la commande fonctionne, remplacer : echo %rep%|FINDSTR /r ^[0-9]*>nul par echo %rep%|findstr /r "[^0-9]" > nul | |||||||
Petit astucien | Bonsoir Titus68, je crois qu'il y a un hic dans notre commande findstr. Je m'explique: Je voudrais à travers un fichier bat arrêter ma machine,mais ce, de façon interactive. C'est à dire que l'utilisateur répond à certaines questions notamment s'il veut effectivement arrêter sa machine, il lui est également demandé de renseigner le temps avant lequel la machine doit s'arrêter.Tout fonctionne normalement jusqu'au moment ou l'utilisateur défini son temps d'arrêt. je penses que ma commande ne me donne pas l'ERRORLEVEL me permettant d'aller à l’étiquette :TempsValide. voici mon code SET /p delai=Dans combien de temps voulez-vous arreter votre machine ? echo %delai%|findstr /r "[^0-9]" > nul // ici je contrôle la saisie de l'utilisateur,il faut que ce soit un entier, sinon le message d'erreur " vous devez saisir un entier valide" s'affiche echo. if ERRORLEVEL 1 goto TempsValide // si la saisie est bonne, cad si c'est un entier on va à l'étiquette TempsValide dans laquelle on éteint proprement dit la machine selon %delai% echo ERREUR: Vous devez saisir un entier valide echo. if NOT ERRORLEVEL 1 goto Suite En remplaçant ma commande echo %rep%|FINDSTR /r ^[0-9]*>nul par la sienne echo %delai%|findstr /r "[^0-9]" > nul c'est toujours le même résultat. TempsValide n'est jamais exécuté si bien que j'obtiens toujours le message d'erreur " Vous devez saisir un entier valide " Question: n' y a t-il pas un moyen de récupérer la valeur ERRORLEVEL rendu par la commande FINDSTR ? si oui comment ? Aussi en consultant l'aide de la commande FINDSTR il est dit que : [^class] Classe inverse : tout caractère n'appartenant pas au jeu, ce qui selon moi veut dire que ta commande echo %delai%|findstr /r "[^0-9]" > nul ne prendra en compte aucune valeur numérique. | |||||||
Astucien ![]() | Bonsoir Pytheas, Chez moi çà fonctionne, exemple @echo off et voici le résultat : Sinon pour voir la valeur de ERRORLEVEL, faire : Echo %delai%|findstr /r "[^0-9]" > nul echo Code retour=%ERRORLEVEL%
| |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | ||||||||||||||||
|