1

Я создал этот .bat-файл, который вызывается нажатием на соответствующий ярлык, который настроен правильно. Но последние два сравнения, кажется, не оценивают должным образом.

Вот так.

@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

Те и другие:

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

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

Где может быть опечатка?

1 ответ1

2

Где может быть опечатка?

  • У вас много ошибок в вашем командном файле.

  • Вы явно не понимаете, как использовать set и set /a . Пожалуйста, прочитайте набор .

  • Также стоит почитать отладку ваших командных файлов .

  • Общее замечание - исправьте отступы (это облегчает отладку).


исправления

SET landevcename='Imagine any name for a device'

Должно быть:

SET landevcename="Imagine any name for a device"

Если вы используете ' тогда», вам нужно экранировать ' в» для команды for .


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

Должно быть:

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

/a используется для числовых выражений, а не для строковых назначений.


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

Должно быть:

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

SET /a counter+=1

Должно быть:

SET /a "counter+=1"

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

Должно быть:

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

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

Должно быть:

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

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

Должно быть:

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

Вы должны выйти из = используя ^ , и удалить " s (они являются частью переменной %landevcename%).


Упрощенный пакетный файл

Вы можете делать то, что хотите, с помощью одной команды for /f и меньшего количества переменных. Вам не нужен индекс или счетчик.

Используйте следующий пакетный файл и установите соответствующее имя landevicename .

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

Пример вывода:

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

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • findstr - поиск строк в файлах.
  • for /f - Циклическая команда против результатов другой команды.
  • if - Условно выполнить команду.
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
  • wmic - команда инструментария управления Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .