Desativar / ativar o dispositivo LAN por lote de arquivos: se as comparações não funcionarem


1

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

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

Os dois:

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

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

Onde poderia estar o erro de digitação?


Você pode me dizer os erros que está recebendo?
precisa saber é o seguinte

Texto do ECHO - O status da conexão local é:% landevcestatusT% é NONE.
icbytes

Você poderia tentar definir um IF / ELSE em vez de duas instruções FOR separadas? Parece uma rotina realmente complexa para uma saída tão simples. Os problemas estão nas instruções IF, pois ele apenas obtém a variável que você definiu no início - ignorando todo o resto.
precisa saber é o seguinte

Você quer dizer, em vez de dois se? não para?
Icbytes 02/03

Respostas:


2

Onde poderia estar o erro de digitação?

  • Você tem muitos erros no seu arquivo em lotes.

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

  • Também valeria a pena ler Depurando seus arquivos em lotes .

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


Correções

SET landevcename='Imagine any name for a device'

Deveria estar:

SET landevcename="Imagine any name for a device"

Se você usar ', então você precisa para escapar da 'sua forcomando.


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

Deveria estar:

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

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


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

Deveria estar:

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

SET /a counter+=1

Deveria estar:

SET /a "counter+=1"

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

Deveria estar:

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

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

Deveria estar:

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

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

Deveria estar:

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

Você precisa evitar o =uso ^e remover os "s (eles fazem parte da variável %landevcename%).


Arquivo em lote simplificado

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

Use o seguinte arquivo em lotes e defina landevicenameconforme 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 AZ da linha de comando do Windows CMD - uma excelente referência para todos os itens relacionados à linha de cmd do Windows.
  • findstr - Procure por strings nos arquivos.
  • for / f - comando de loop em relação aos resultados de outro comando.
  • if - Executa condicionalmente um comando.
  • set - Exibe, define ou remove variáveis ​​de ambiente CMD. As alterações feitas com o SET permanecerão apenas durante a sessão atual do CMD.
  • wmic - Comando da Instrumentação de Gerenciamento do Windows.

SET landevcename = imaginar qualquer nome para um dispositivo" parece defeituoso pode ser, esqueceu primeiras citações.?
icbytes

Resposta fixo ...
DavidPostill

Você também viu que às vezes / a é necessário, devido a SetEnbleDelayesExpansion. Eu tenho isso mesmo a partir de um site SO, parcialmente ...
icbytes 02/03

/anão tem nada a ver com delayed expansion. É para expressões aritméticas. Por favor, leia o link que eu lhe dei.
DavidPostill

Obrigado mais uma vez, eu também estou nesse site há algum tempo, ainda mantive o / a porque parecia funcionar principalmente. De qualquer forma, adotarei o script como você recomendou e voltarei com os resultados em breve.
icbytes 02/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.