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
eset /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.