[Batch] Commande ECHO désactivée [Résolu/Fermé]

Signaler
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
-
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
-
Bonjour à tous,

Je rencontre un problème dans mon code ci-dessous (qui doit m'afficher le message "activer" si mon wifi est déconnecté)
Lorsque j'essaye d'afficher la valeur de ma variable k, j'obtiens le message "Commande ECHO désactivée". Du coup, impossible de tester mon if positionné après sachant que je ne pas connaitre la valeur de k.
A noter que dans la commande for, le echo %%k fonctionne bien et m'affiche " Média déconnecté".

J'ai ajouté quelques commentaires dans le code pour la compréhension.

Auriez vous une idée du problème?



echo off
cls
setlocal enableDelayedExpansion

REM récupérer le numéro de ligne de *sans fil Wi-Fi* de la commande ipconfig

for /f "tokens=1 delims=]" %%i in ('ipconfig ^| find /N "sans fil Wi-Fi"') do (
for /f "tokens=1 delims=[" %%j in ("%%i") do (
set result=%%j
echo !result!

)
)

REM incrémenter le numéro de ligne pour l'utiliser en skip

set /a result=result+1
echo %result%


REM lire le résultat à partir de la ligne %result%

for /f "skip=%result% tokens=2 delims=:" %%k in ('ipconfig') do echo %%k & goto suit
:suit

REM erreur ici: Commande ECHO désactivée.

echo !k!
echo %k%


pause

REM impossible de vérifier la valeur de %k% car erreur "Commande ECHO désactivée". Le résultat du if est toujours "desactiver"
if ["!k!"==" Média déconnecté"] (echo activer) else (echo desactiver)


pause



Ce qui donne en output:

34
35
Média déconnecté
Commande ECHO désactivée.
Commande ECHO désactivée.
Appuyez sur une touche pour continuer...
desactiver
Appuyez sur une touche pour continuer...

10 réponses

Messages postés
18210
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
1 septembre 2020
4 967
hello
essayer
for /f "skip=%result% tokens=2 delims=:" %%k in ('ipconfig') do set x=%%k&echo %%k & goto suit 
:suit

echo %x%
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
Salut,

Toujours le même problème.
Ta modif ne change rien
Messages postés
18210
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
1 septembre 2020
4 967
%result% pointe sur une ligne vide ?
vérfier en affichant ce qui passe dans la boucle
for /f "tokens=2 delims=:" %%k in ('ipconfig') do echo %%k
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
Autant pour moi, j'ai retesté ce matin, cela semble mieux. Sauf mon if qui déconne, et passe uniquement dans le else.
Voici le code, avec les outputs des echo et du if (valeurs après le ==>)

echo off
cls
setlocal enableDelayedExpansion

REM récupérer le numéro de ligne de *sans fil Wi-Fi*

for /f "tokens=1 delims=]" %%i in ('ipconfig ^| find /N "sans fil Wi-Fi"') do (
for /f "tokens=1 delims=[" %%j in ("%%i") do (
set result=%%j
echo !result! ==> "34"

)
)

REM incrémenter le numéro de ligne pour l'utiliser en skip

set /a result=result+1
echo %result% ==> "35"


REM lire le résultat à partir de la ligne %result%



for /f "skip=%result% tokens=2 delims=:" %%k in ('ipconfig') do set x=%%k&echo %%k & goto suit
:suit ==> " Média déconnecté"

echo !x! ==> " Média déconnecté"

REM erreur ici: Commande ECHO désactivée.


REM impossible de vérifier la valeur de %k% car erreur "Commande ECHO désactivée". Le résultat du if est toujours "desactiver"
if ["!x!"==" Média déconnecté"] (echo activer) else (echo desactiver)

==> "desactiver", alors que j'attends qu'il m'afficher "activer"

pause
Messages postés
18210
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
1 septembre 2020
4 967
ca veut dire que x est vide, donc %%k est vide
enlever le @echo off pour voir ce que fait la boucle for
echo !x! ==> " Média déconnecté"
REM erreur ici: Commande ECHO désactivée.
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
Voici le résultat:


setlocal enableDelayedExpansion

REM rÚcupÚrer le numÚro de ligne de *sans fil Wi-Fi*

for /F "tokens=1 delims=]" %i in ('ipconfig | find /N "sans fil Wi-Fi"') do (for /F "tokens=1 delims=[" %j in ("%i") do (
set result=%j
echo !result!
) )

(for /F "tokens=1 delims=[" %j in ("[34") do (
set result=%j
echo !result!
) )

(
set result=34
echo !result!
)
34

REM incrÚmenter le numÚro de ligne pour l'utiliser en skip

set /a result=result+1

echo 35
35

REM lire le rÚsultat Ó partir de la ligne 35

for /F "skip=35 tokens=2 delims=:" %k in ('ipconfig') do set x=%k & echo %k & goto suit

set x= Média déconnecté & echo Média déconnecté & goto suit
Média déconnecté

echo !x!
Média déconnecté

if ["!x!" == " MÚdia dÚconnectÚ"] (echo activer ) else (echo desactiver )
desactiver

pause
Appuyez sur une touche pour continuer...
Messages postés
18210
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
1 septembre 2020
4 967
les accents dans un .bat sont problématiques
tester avec findstr "M.dia d.sactiv."
un point == 1 caractère
if ["!x!" == " MÚdia dÚconnectÚ"] (echo 
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
Pas sûr de comprendre ce que tu veux que je fasse.
Voici ma tentative...:

[...]
REM lire le rÚsultat Ó partir de la ligne 35

for /F "skip=35 tokens=2 delims=:" %k in ('ipconfig') do set x=%k & echo %k & goto suit

set x= Média déconnecté & echo Média déconnecté & goto suit
Média déconnecté

echo !x!
Média déconnecté

echo !x! |findstr "M.dia d.connect."
Média déconnecté |findstr "M.dia d.connect."

if ["!x!" == " MÚdia dÚconnectÚ"] (echo activer ) else (echo desactiver )
desactiver

pause
Appuyez sur une touche pour continuer...
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
testé avec
Média déconnecté |findstr ".M.dia d.connect."
et
Média déconnecté |findstr " M.dia d.connect."
pour tenir compte de l'espace dans " Média déconnecté".

Mais je ne comprends pas, quand je lance juste cette commande dans un cmd.exe, cela semble ok:
echo Média déconnecté | findstr ".connect."
Média déconnecté

Mais pas dans le script, aucun retour.
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
[...]
REM lire le rÚsultat Ó partir de la ligne 35

for /F "skip=35 tokens=2 delims=:" %k in ('ipconfig') do set x=%k & echo %k & goto suit

set x= Média déconnecté & echo Média déconnecté & goto suit
Média déconnecté

echo !x!
Média déconnecté

echo !x! |findstr ".connect."
Média déconnecté |findstr ".connect."

if ["!x!" == " MÚdia dÚconnectÚ"] (echo activer ) else (echo desactiver )
desactiver

pause
Appuyez sur une touche pour continuer...
Messages postés
18210
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
1 septembre 2020
4 967
il faut tester ERRORLEVEL retourné par findstr, 0 == trouvé
echo !x! |findstr "M.dia d.connect."
Média déconnecté |findstr "M.dia d.connect."

if %ERRORLEVEL% EQU 0 (echo activer ) else (echo desactiver )
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
Ok, mais désormais dans tous les cas, je passe dans le if (activer) et plus dans le else
Messages postés
430
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 mai 2016
29
j'ai tout remis à plat et au propre, et cela fonctionne enfin.
Merci pour ton aide!