× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Windows 7
 Souci avec une commande dans un fichier bat
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
pytheas
  Posté le 02/08/2014 @ 14:42 
Aller en bas de la page 
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é
Titus68
 Posté le 02/08/2014 à 17:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Sinon quelquechose comme çà ?

@echo on
:boucle
set /p rep=réponse ou FIN ?
if "%rep%" EQU "FIN" goto fin
set /A test=10 * %rep%
if "%test%" EQU "0" goto invalide
if "%test%" NEQ "" goto ok
:invalide
echo Reponse invalide
goto boucle
:ok
echo OK
:fin
pause

Titus68
 Posté le 02/08/2014 à 18:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

En fait la commande fonctionne, remplacer :

echo %rep%|FINDSTR /r ^[0-9]*>nul

par

echo %rep%|findstr /r "[^0-9]" > nul

pytheas
 Posté le 06/08/2014 à 20:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

Titus68
 Posté le 06/08/2014 à 21:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir Pytheas,

Chez moi çà fonctionne, exemple

@echo off
:saisidelai
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.
goto saisidelai
:TempsValide
echo ok
pause

et voici le résultat :

Sinon pour voir la valeur de ERRORLEVEL, faire :

Echo %delai%|findstr /r "[^0-9]" > nul

echo Code retour=%ERRORLEVEL%
If ERRORLEVEL 1 goto TempsValide

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
39,99 €Amazon Fire TV Stick 4K Ultra HD à 39,99 €
Valable jusqu'au 27 Novembre

Amazon a lancé récemment en France un nouveau modèle de son Fire TV Stick, une clé HDMI à brancher sur votre TV. En ce moment, l'Amazon Fire TV Stick 4K Ultra HD est à 39,99 € livrée gratuitement au lieu de 59,99 €. Ce nouveau modèle offre désormais une sortie en 4K pour tous vos contenus en ultra haute définition, est compatible Alexa et possède une télécommande améliorée avec plus de boutons de contrôle. Avec cette clé, vous allez pouvoir voir facilement Prime Video, Netflix, Disney+, YouTube, Spotify, MyCanal Molotov sur votre TV.


> Voir l'offre
84,21 €SSD Crucial P1 1 To (3D NAND, NVMe, PCIe, M.2) à 84,21 € livré
Valable jusqu'au 29 Novembre

Amazon Allemagne fait une promotion sur le SSD Crucial P1 1 To (3D NAND, NVMe, PCIe, M.2) qui passe à 79,67 € (avec la TVA ajustée). Comptez 4,54 € pour la livraison en France soit un total de 84,21 € livré. On le trouve ailleurs à partir de 110 €. Ce SSD offre des vitesses de lecture/écriture séquentielle allant jusqu’à 2 000/1 750 Mo/s. Il est garanti 5 ans.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
19,99 €Souris gamer Logitech MX518 à 19,99 €
Valable jusqu'au 27 Novembre

Boulanger fait une promotion sur la réédition Legendary de la souris Logitech MX518 qui passe à 19,99 € alors qu'on la trouve ailleurs à 45 €. Cette très bonne souris dédiée aux joueurs dispose d'un capteur optique très précis Hero 16000 DPI, 8 boutons programmables et une mémoire permettant de sauvegardera 5 profils d'utilisation différents. 


> Voir l'offre

Sujets relatifs
trouver fichier *.txt avec mot clé dans rep précis
problémes avec transfert de fichier
Ajouter un programme dans "ouvrir avec"
Fichier texte enregistré dans bloc note ne s'ouvre pas ?
Problème avec Provider for Google Agenda dans Thunderbird
Ouvrir avec LibreOffice (par défaut) dans ma session (W7 nl)
fichier dans dossier
Restore un fichier ou un dossier avec Paragon Backup & Recovery 2014 Free é
fichier créé sur word 2007...illisible avec word 2002...
Insertion ouy déplacement d'images dans fichier photos
Plus de sujets relatifs à Souci avec une commande dans un fichier bat
 > Tous les forums > Forum Windows 7