Отключить / включить сетевое устройство по пакетному файлу: если сравнение не работает
Я создал этот.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 ответ
Где может быть опечатка?
У вас много ошибок в вашем командном файле.
Вы явно не понимаете, как использовать
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.