1 votes

Désactiver/activer lan-device par fichier batch : Si les comparaisons ne fonctionnent pas

J'ai créé ce fichier .bat qui est invoqué en cliquant sur le raccourci approprié, qui est configuré correctement. Mais les deux dernières comparaisons semblent ne pas être évaluées correctement.

C'est parti.

@ECHO off
SETLOCAL EnableDelayedExpansion 

SET landevcename='Imagine any name for a device'

SET landevcestatus=0
SET landevcestatusDisab=0
SET landevcestatusConn=2
SET landevcestatusT="NONE"
SET landevceidx=0

SET counter=1

ECHO Lan device to be checked is: %landevcename%

FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get index')  DO ( 
        IF !counter!==2 SET /a landevceidx=%%I             

        SET /a counter+=1
     )
ECHO Index of local area connection is: %landevceidx%

SET /a counter=1
FOR /F "tokens=1" %%J IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get netconnectionstatus')  DO (       
                            IF !counter!==2 SET /a landevcestatus=%%J              

                            SET /a counter+=1
                           )

ECHO Status of local area connection is: %landevcestatus%                          

REM IF %landevcestatus%==%landevcestatusDisab% SET /a landevcestatusT=Disabled
IF %landevcestatus%==0 SET /a %landevcestatusT% "ItIsNotEnabled"

REM IF %landevcestatus%==%landevcestatusConn% SET /a landevcestatusT=Connected         
**IF %landevcestatus%==2 SET /a %landevcestatusT% "ItIsEnabled"**

ECHO Text - Status of local area connection is: %landevcestatusT%

ECHO Status of local area connection is: %landevcestatus%                          

CMD
@ECHO off

Ces deux-là :

IF %landevcestatus%==0 SET /a %landevcestatusT% "ItIsNotEnabled" (Il n'est pas activé)

IF %landevcestatus%==2 SET /a %landevcestatusT% "ItIsEnabled" (Il est activé)

Où peut se trouver la faute de frappe ?

2voto

DavidPostill Points 140654

Où pourrait être la faute de frappe ?

  • Vous avez beaucoup de dans votre fichier batch.

  • Vous êtes clairement confus sur la façon d'utiliser set y set /a . Veuillez lire set .

  • Il serait également utile que vous lisiez Débogage de vos fichiers batch .

  • Une observation générale - corrigez votre indentation (cela facilite le débogage).


Corrections

SET landevcename='Imagine any name for a device'

Ça devrait l'être :

SET landevcename="Imagine any name for a device"

を使用する場合 ' alors vous devez échapper à la ' dans votre for commandement.


IF !counter!==2 SET /a landevceidx=%%I

Ça devrait l'être :

IF !counter!==2 SET landevceidx=%%I

/a est utilisé pour les expressions numériques no les affectations de chaînes de caractères.


IF !counter!==2 SET /a landevcestatus=%%J 

Ça devrait l'être :

IF !counter!==2 SET landevcestatus=%%J

SET /a counter+=1

Ça devrait l'être :

SET /a "counter+=1"

IF %landevcestatus%==0 SET /a %landevcestatusT% "ItIsNotEnabled"

Ça devrait l'être :

IF %landevcestatus%==0 SET landevcestatusT="ItIsNotEnabled"

IF %landevcestatus%==2 SET /a %landevcestatusT% "ItIsEnabled"

Ça devrait l'être :

IF %landevcestatus%==2 SET landevcestatusT="ItIsEnabled"

FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get index')  DO ( 

Ça devrait l'être :

FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where Name^=%landevcename% get index')  DO ( 

Vous devez échapper à la = en utilisant ^ et retirer le " (ils font partie de la variable %landevcename% ).


Fichier batch simplifié

Vous pouvez faire ce que vous voulez avec un seul for /f et moins de variables. Vous n'avez pas besoin d'un index ou d'un compteur.

Utilisez le fichier batch suivant et définissez landevicename le cas échéant.

LanStatus.cmd :

@echo off
setlocal 

set landevcename="Remote NDIS based Internet Sharing Device"

echo Lan device to be checked is: %landevcename%

rem skip first line
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1,2" %%i IN (`wmic PATH win32_networkadapter where Name^=%landevcename% get netconnectionstatus^, index ^| findstr /r /v "^$"`)  DO (  set landevceidx=%%i
  set landevcestatus=%%j       
  )

if %landevcestatus%==2 (
  set landevcestatusT="ItIsEnabled"
  ) else (
  set landevcestatusT="ItIsNotEnabled"
  )

echo Text - Status of local area connection is: %landevcestatusT%

echo Status of local area connection is: %landevcestatus%                        

echo Index of local area connection is: %landevceidx%

endlocal

Exemple de sortie :

F:\test>lanstatus
Lan device to be checked is: "Remote NDIS based Internet Sharing Device"
Text - Status of local area connection is: "ItIsEnabled"
Status of local area connection is: 2
Index of local area connection is: 17

Autres lectures

  • Un index A-Z de la ligne de commande CMD de Windows - Une excellente référence pour tout ce qui concerne la ligne cmd de Windows.
  • findtr - Recherche de chaînes de caractères dans les fichiers.
  • pour /f - Commande en boucle contre les résultats d'une autre commande.
  • si - Exécuter une commande de manière conditionnelle.
  • set - Afficher, définir ou supprimer les variables d'environnement CMD. Les modifications apportées avec SET ne seront conservées que pendant la durée de la session CMD en cours.
  • wmic - Commande Windows Management Instrumentation.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X