Desabilitar / habilitar lan-device por batchfile: se as comparações não estiverem funcionando

1

Eu criei este arquivo .bat que é chamado clicando no atalho apropriado, que está configurado corretamente. Mas as duas últimas comparações parecem não avaliar corretamente.

Aqui vamos nós.

@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

Esses dois:

SE% landevcestatus% == 0 SET /%% landevcestatusT% "ItIsNotEnabled"

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

Onde poderia estar o erro de digitação?

    
por icbytes 02.03.2016 / 15:06

1 resposta

2

Onde poderia estar o erro de digitação?

  • Você tem muitos erros no seu arquivo de lote.

  • Você está claramente confuso sobre como usar set e set /a . Por favor, leia o conjunto .

  • Também valeria a pena você ler Depurando seus arquivos em lote .

  • Uma observação geral - corrija seu recuo (facilita a depuração).

Correções

SET landevcename='Imagine any name for a device'

Deve ser:

SET landevcename="Imagine any name for a device"

Se você usar ' , precisará sair do ' no comando for .

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

Deve ser:

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

/a é usado para expressões numéricas não atribuições de strings.

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

Deve ser:

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

Deve ser:

SET /a "counter+=1"
IF %landevcestatus%==0 SET /a %landevcestatusT% "ItIsNotEnabled"

Deve ser:

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

Deve ser:

IF %landevcestatus%==2 SET landevcestatusT="ItIsEnabled"
FOR /F "tokens=1" %%I IN ('wmic PATH win32_networkadapter where "Name=%landevcename%" get index')  DO ( 

Deve ser:

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

Você precisa escapar do = usando ^ e remover o " s (eles fazem parte da variável %landevcename% ).

Arquivo em lote simplificado

Você pode fazer o que quiser com um único comando for /f e menos variáveis. Você não precisa de um índice ou de um contador.

Use o seguinte arquivo em lote e defina landevicename conforme apropriado.

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

Exemplo de saída :

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

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • findstr - Pesquise strings em arquivos.
  • para / f - Comando Loop contra os resultados de outro comando.
  • if - Realize condicionalmente um comando.
  • definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
  • wmic - Comando de instrumentação de gerenciamento do Windows.
por 02.03.2016 / 15:53