Войти

Показать полную графическую версию : [решено] Проверка состояния Wi-Fi и уровня его сигнала


Страниц : [1] 2

wareznik3dll
07-11-2020, 23:21
Есть код для проверки состояния Wi-Fi и уровня его сигнала:

@Echo Off
SetLocal EnableExtensions & REM Использование дополнительных ключей.
Chcp 1251 >Nul
Title Проверка состояния Wi-Fi и уровня его сигнала.
Mode Con: Cols=78 Lines=9
Set Count=1
:Check
For %%n In ("Имя" "Состояние:" " SSID" "Сигнал") Do (
For /f "Tokens=1,* Delims=: " %%a In ('Netsh Wlan Show Interfaces ^| Find /i %%n') Do (
If %%n=="Имя" (
Set "Name=%%b"
)
If %%n=="Состояние:" (
Set "State=%%b"
)
If %%n==" SSID" (
Set "SSID=%%b"
)
If %%n=="Сигнал" (
Set "Signal=%%b"
)
)
)
Echo Проверок : %Count%
Echo.
Echo Имя : %Name%
Echo SSID : %SSID%
Echo Состояние : %State%
Echo Сигнал : %Signal%
Echo.
Echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.
Set /a Count+=1
Pause >Nul
Goto Check

Вопрос: Как получить более чувствительные данные, а то замечаю инфа очень медленно обновляется и вовсе не точно по сравнении с программой "Wi-Fi Scanner"?

Скорость не важна
Важно: только четыре строчки "Имя, SSID, Состояние, Сигнал, Наглядный (не разбросанный) обзор выводимой инфы ну и наипростейший код".
Менее важно: "Количество проверок, Дата и Время конечной проверки и Только нужный размер окна консоли".
Наименее важно: "Заголовок окна консоли".
Ну и если получится (очень важно) рабочий код написанный с использованием кодовой таблицы 65001 (UTF-8) то-есть код должен быть сохранен именно в этой кодировке.

Благодаря всем неравнодушным резальтат был добит таким кодом:

@Echo Off
REM WLAN (Wireless Local Area Network) — беспроводная локальная сеть.
REM Wi-Fi (Wireless Fidelity) — это название торгового бренда, которое используется для обозначения устройств, подключаемых к беспроводной сети.
REM Чаще всего термин WiFi рассматривается как синоним WLAN.
Chcp 65001 >Nul
REM Получение нужного размера окна
Mode Con: Cols=80 LInes=43
Title Вывод информации о подключенной WLAN (русская версия).
REM Указание размещения файла с базой данных
Set "DataBase=DataBase.txt"
REM Set "DataBase=DataBaseRus.txt"
Set Count=1

:Check
SetLocal EnableExtensions
REM Строки для физического и виртуального (с подменой Netsh Wlan Show Interfaces на когда-то полученные) тестирований
REM For /f "Eol=; Tokens=1-3*" %%a In (WiFi2.txt) Do Set "A1=%%a"& Set "B2=%%b"& Set "C3=%%c"& Set "D4=%%d"& Call :M1
For /f "Tokens=1-3*" %%a In ('Netsh Wlan Show Interfaces') Do Set "A1=%%a"& Set "B2=%%b"& Set "C3=%%c"& Set "D4=%%d"& Call :M1
REM Перевод строк которые можно перевести
If "%Interface%"=="There is no wireless interface on the system." Set "Interface=Беспроводной интерфейс в системе отсутствует."
If "%Interface%"=="The Wireless AutoConfig Service (wlansvc) is not running." Set "Interface=Служба автонастройки беспроводной сети (wlansvc) не запущена."
If "%Interface%"=="There is 1 interface on the system:" Set "Interface=В системе 1 интерфейс:"
If "%Interface:~-26%"==" interfaces on the system:" If "%Interface:~0,10%"=="There are " Set "N=%Interface:~10%"& Call :M3
If "%Interface%"=="There are %N% interfaces on the system:" Set "Interface=В системе %N% интерфейс%Ending%:"
If "%State%"=="connected" Set "State=Подключено"
If "%State%"=="disconnected" Set "State=Отключено"
If "%State%"=="ad hoc network formed" Set "State=Создана сеть компьютер-компьютер"
If "%RadioStatus%"=="Hardware On" Set "RadioStatus=Оборудование вкл."
If "%RadioStatus2%"=="Software On" Set "RadioStatus2=Программное обеспечение вкл."
If "%NetworkType%"=="Infrastructure" Set "NetworkType=Инфраструктура"
If "%NetworkType%"=="Adhoc" Set "NetworkType=Прямое соединение"
If "%ConnectionMode%"=="Auto Connect" Set "ConnectionMode=Автоматическое подключение"
If "%ConnectionMode%"=="Profile" Set "ConnectionMode=Профиль"
If "%HostedNetworkStatus%"=="Not available" Set "HostedNetworkStatus=Недоступно"
If "%HostedNetworkStatus%"=="Not started" Set "HostedNetworkStatus=Не запущено"
If "%HostedNetworkStatus%"=="Started" Set "HostedNetworkStatus=Запущено"
REM Вывод возможной информации в окне консоли
Echo.
Echo Проверка : %Count%
Echo Дата : %Date%
Echo Время : %Time%
Echo.
Echo %Interface%
Echo.
Echo Имя : %Name%
Echo Описание : %Description%
Echo Идентификатор GUID : %GUID%
Echo Физический адрес : %PhysicalAddress%
Echo Состояние : %State%
Echo Cостояние радио : %RadioStatus%
Echo. %RadioStatus2%
Echo SSID : %SSID%
Echo BSSID : %BSSID%
Echo Тип сети : %NetworkType%
Echo Тип радио : %RadioType%
Echo Проверка подлинности : %Authentication%
Echo Шифр : %Cipher%
Echo Режим подключения : %ConnectionMode%
Echo Канал : %Channel%
Echo Скорость приема (Мбит/с) : %ReceiveRate%
Echo Скорость передачи (Мбит/с) : %TransmitRate%
Echo Сигнал : %Signal%
Echo Профиль : %Profile%
Echo.
Echo Состояние размещенной сети : %HostedNetworkStatus%
If Exist %DataBase% (
REM Вывод с использованием базы данных:
Echo Клиенты в размещенной сети : %Client1%
Echo. %Client2%
Echo. %Client3%
Echo. %Client4%
Echo. %Client5%
Echo. %Client6%
Echo. %Client7%
Echo. %Client8%
Echo. %Client9%
Echo. %Client10%
) Else (
REM Или стандартный вывод ^(если не нужно использование базы данных^):
Echo Клиенты в размещенной сети : %HostedNetworkClient1%
Echo. %HostedNetworkClient2%
Echo. %HostedNetworkClient3%
Echo. %HostedNetworkClient4%
Echo. %HostedNetworkClient5%
Echo. %HostedNetworkClient6%
Echo. %HostedNetworkClient7%
Echo. %HostedNetworkClient8%
Echo. %HostedNetworkClient9%
Echo. %HostedNetworkClient10%)
Echo.
Echo.%ClientsLimitReached%
Echo.
Echo Нажмите любую клавишу, чтобы обновить информацию о подключенной WLAN.
Pause >Nul
Set /a Count+=1
REM Обнуление всех выше указанных переменных до метки [:Check]
EndLocal & Set Count=%Count%
Goto Check

:M1
REM Блокировка приёма данных от второго и более интерфейсов (следующие две строки)
%E%
If %A1%==Name If DefIned Name Set "E=Exit /b"& Exit /b
REM Создание переменных [%Interface%]
If Not DefIned Interface (If "%D4:~-1%"==" " (
Set "Interface=%A1% %B2% %C3% %D4:~0,-1%"& Exit /b
) Else Set "Interface=%A1% %B2% %C3% %D4%"& Exit /b)
REM Создание переменных [%с одним словом или символом, кроме двоеточия%]
If "%B2%"==":" If Not DefIned %A1% (
If "%D4%"=="" Set "%A1%=%C3%"& Exit /b
If Not "%D4%"=="" Set "%A1%=%C3% %D4%"& Exit /b)
REM Создание переменных [%с двумя словами или символами, кроме двоеточия%]
If Not DefIned %A1%%B2% (
If "%C3%"==":" Set "%A1%%B2%=%D4%"& Exit /b
REM Создание переменных [%ReceiveRate%] и [%TransmitRate%]
If "%B2%"=="rate" Set "%A1%%B2%=%D4:~2%"& Exit /b)
REM Создание переменной [%RadioStatus2%]
If DefIned RadioStatus If Not DefIned RadioStatus2 Set "RadioStatus2=%A1% %B2%"& Exit /b
REM Создание переменных [%с тремя словами или символами, кроме двоеточия%]
If Not DefIned %A1%%B2%%C3% Set "%A1%%B2%%C3%=%D4:~2%"
REM Продолжение работы для создания переменных [%HostedNetworkClients(1-10)%], [%Client(1-10)%] и [%ClientsLimitReached%]
If Not DefIned HostedNetworkClients Exit /b
REM Выдача чисел от 9 до 1 для создания переменных [%HostedNetworkClients(1-10)%], [%Client(1-10)%] и [%ClientsLimitReached%]
For /l %%a In (10,-1,1) Do Call :M2 %%a& If DefIned HostedNetworkClient%%a Exit /b

:M2
Set /a min=%1-1
REM Создание переменных [%HostedNetworkClients10%], [%Client10%] и [%ClientsLimitReached%]
If %min% EQU 9 If DefIned HostedNetworkClient%min% If Not DefIned HostedNetworkClient%1 (
set "ClientsLimitReached=Достигнут предел отображения клиентов в размещенной сети ^(не более 10^)"
Set HostedNetworkClient%1=%A1%
For /f "Eol=; Tokens=1* Delims==" %%a In (%DataBase%) Do If %A1%==%%a (
Set "Client%1=%%b"& Exit /b) Else Set "Client%1=Клиент [%A1%] не найден в базе данных"
Exit /b)
REM Создание переменных [%HostedNetworkClients(2-9)%] и [%Client(2-9)%]
If %min% LSS 9 If %min% GTR 0 If DefIned HostedNetworkClient%min% If Not DefIned HostedNetworkClient%1 (
Set HostedNetworkClient%1=%A1%
For /f "Eol=; Tokens=1* Delims==" %%a In (%DataBase%) Do If %A1%==%%a (
Set "Client%1=%%b"& Exit /b) Else Set "Client%1=Клиент [%A1%] не найден в базе данных"
Exit /b)
REM Создание переменных [%HostedNetworkClients1%] и [%Client1%]
If %min% EQU 0 If DefIned HostedNetworkClients If Not DefIned HostedNetworkClient%1 (
Set HostedNetworkClient%1=%HostedNetworkClients%
For /f "Eol=; Tokens=1* Delims==" %%a In (%DataBase%) Do If %HostedNetworkClients%==%%a (
Set "Client%1=%%b"& Exit /b) Else Set "Client%1=Клиент [%HostedNetworkClients%] не найден в базе данных"
Exit /b
)
Exit /b

:M3
REM Добавление правильного окончания к слову [интерфейс] в зависимости от количества
If "%Interface:~-26%"==" interfaces on the system:" If "%Interface:~0,10%"=="There are " Set "N=%N:~0,-26%"
If %N% LEQ 9 (
If %N% EQU 0 Set Ending=ов& Exit /b
If %N% EQU 1 Set Ending=& Exit /b
If %N% GEQ 2 If %N% LEQ 4 Set Ending=а& Exit /b
If %N% GEQ 5 If %N% LEQ 9 Set Ending=ов& Exit /b)
If %N% GTR 9 (
If %N:~-2,1% EQU 1 Set Ending=ов& Exit /b
If %N:~-2,1% GEQ 2 (
If %N:~-1% EQU 0 Set Ending=ов& Exit /b
If %N:~-1% EQU 1 Set Ending=& Exit /b
If %N:~-1% GEQ 2 If %N:~-1% LEQ 4 Set Ending=а& Exit /b
If %N:~-1% GEQ 5 If %N:~-1% LEQ 9 Set Ending=ов& Exit /b)
If %N:~-2,1% EQU 0 (
If %N:~-1% EQU 0 Set Ending=ов& Exit /b
If %N:~-1% EQU 1 Set Ending=& Exit /b
If %N:~-1% GEQ 2 If %N:~-1% LEQ 4 Set Ending=а& Exit /b
If %N:~-1% GEQ 5 If %N:~-1% LEQ 9 Set Ending=ов& Exit /b)
)
@Echo Off
REM WLAN (Wireless Local Area Network) — бездротова локальна мережа.
REM Wi-Fi (Wireless Fidelity) — це назва торгового бренду, яка використовується для позначення пристроїв, що підключаються до бездротової мережі.
REM Найчастіше термін WiFi розглядається як синонім WLAN.
Chcp 65001 >Nul
Mode Con: Cols=83 LInes=43
Title Виведення інформації про підключену WLAN (українська версія).
Set "DataBase=DataBase.txt"
REM Set "DataBase=DataBaseUkr.txt"
Set Count=1

:Check
SetLocal EnableExtensions

For /f "Tokens=1-3*" %%a In ('Netsh Wlan Show Interfaces') Do Set "A1=%%a"& Set "B2=%%b"& Set "C3=%%c"& Set "D4=%%d"& Call :M1

If "%Interface%"=="There is no wireless interface on the system." Set "Interface=Бездротовий інтерфейс в системі відсутній."
If "%Interface%"=="The Wireless AutoConfig Service (wlansvc) is not running." Set "Interface=Служба автоналаштування бездротової мережі (wlansvc) не запущена."
If "%Interface%"=="There is 1 interface on the system:" Set "Interface=В системі 1 інтерфейс:"
If "%Interface:~-26%"==" interfaces on the system:" If "%Interface:~0,10%"=="There are " Set "N=%Interface:~10%"& Call :M3
If "%Interface%"=="There are %N% interfaces on the system:" Set "Interface=В системі %N% інтерфейс%Ending%:"
If "%State%"=="connected" Set "State=Підключено"
If "%State%"=="disconnected" Set "State=Відключено"
If "%State%"=="ad hoc network formed" Set "State=Створена мережа комп'ютер-комп'ютер"
If "%RadioStatus%"=="Hardware On" Set "RadioStatus=Обладнання вкл."
If "%RadioStatus2%"=="Software On" Set "RadioStatus2=Програмне забезпечення вкл."
If "%NetworkType%"=="Infrastructure" Set "NetworkType=Інфраструктура"
If "%NetworkType%"=="Adhoc" Set "NetworkType=Пряме з'єднання"
If "%ConnectionMode%"=="Auto Connect" Set "ConnectionMode=Автоматичне підключення"
If "%ConnectionMode%"=="Profile" Set "ConnectionMode=Профіль"
If "%HostedNetworkStatus%"=="Not available" Set "HostedNetworkStatus=Недоступно"
If "%HostedNetworkStatus%"=="Not started" Set "HostedNetworkStatus=Не запущено"
If "%HostedNetworkStatus%"=="Started" Set "HostedNetworkStatus=Запущено"

Echo.
Echo Перевірка : %Count%
Echo Дата : %Date%
Echo Час : %Time%
Echo.
Echo %Interface%
Echo.
Echo Ім'я : %Name%
Echo Опис : %Description%
Echo Ідентифікатор GUID : %GUID%
Echo Фізична адреса : %PhysicalAddress%
Echo Стан : %State%
Echo Стан радіо : %RadioStatus%
Echo. %RadioStatus2%
Echo SSID : %SSID%
Echo BSSID : %BSSID%
Echo Тип мережі : %NetworkType%
Echo Тип радіо : %RadioType%
Echo Перевірка автентичності : %Authentication%
Echo Шифр : %Cipher%
Echo Режим підключення : %ConnectionMode%
Echo Канал : %Channel%
Echo Швидкість прийому (Мбіт/с) : %ReceiveRate%
Echo Швидкість передачі (Мбіт/с) : %TransmitRate%
Echo Сигнал : %Signal%
Echo Профіль : %Profile%
Echo.
Echo Стан розміщеної мережі : %HostedNetworkStatus%
If Exist %DataBase% (
REM Виведення з використанням бази даних:
Echo Клієнти в розміщеній мережі : %Client1%
Echo. %Client2%
Echo. %Client3%
Echo. %Client4%
Echo. %Client5%
Echo. %Client6%
Echo. %Client7%
Echo. %Client8%
Echo. %Client9%
Echo. %Client10%
) Else (
REM Або стандартне виведення ^(якщо не потрібно використання бази даних^):
Echo Клієнти в розміщеній мережі : %HostedNetworkClient1%
Echo. %HostedNetworkClient2%
Echo. %HostedNetworkClient3%
Echo. %HostedNetworkClient4%
Echo. %HostedNetworkClient5%
Echo. %HostedNetworkClient6%
Echo. %HostedNetworkClient7%
Echo. %HostedNetworkClient8%
Echo. %HostedNetworkClient9%
Echo. %HostedNetworkClient10%)
Echo.
Echo.%ClientsLimitReached%
Echo.
Echo Натисніть будь-яку клавішу, щоб оновити інформацію про підключену WLAN.
Pause >Nul
Set /a Count+=1
EndLocal & Set Count=%Count%
Goto Check

:M1
%E%
If %A1%==Name If DefIned Name Set "E=Exit /b"& Exit /b
If Not DefIned Interface (If "%D4:~-1%"==" " (
Set "Interface=%A1% %B2% %C3% %D4:~0,-1%"& Exit /b
) Else Set "Interface=%A1% %B2% %C3% %D4%"& Exit /b)
If "%B2%"==":" If Not DefIned %A1% (
If "%D4%"=="" Set "%A1%=%C3%"& Exit /b
If Not "%D4%"=="" Set "%A1%=%C3% %D4%"& Exit /b)
If Not DefIned %A1%%B2% (
If "%C3%"==":" Set "%A1%%B2%=%D4%"& Exit /b
If "%B2%"=="rate" Set "%A1%%B2%=%D4:~2%"& Exit /b)
If DefIned RadioStatus If Not DefIned RadioStatus2 Set "RadioStatus2=%A1% %B2%"& Exit /b
If Not DefIned %A1%%B2%%C3% Set "%A1%%B2%%C3%=%D4:~2%"
If Not DefIned HostedNetworkClients Exit /b
For /l %%a In (10,-1,1) Do Call :M2 %%a& If DefIned HostedNetworkClient%%a Exit /b

:M2
Set /a min=%1-1
If %min% EQU 9 If DefIned HostedNetworkClient%min% If Not DefIned HostedNetworkClient%1 (
set "ClientsLimitReached=Досягнута межа відображення клієнтів у розміщеній мережі ^(не більше 10^)"
Set HostedNetworkClient%1=%A1%
For /f "Eol=; Tokens=1* Delims==" %%a In (%DataBase%) Do If %A1%==%%a (
Set "Client%1=%%b"& Exit /b) Else Set "Client%1=Клієнт [%A1%] не знайдений в базі даних"
Exit /b)
If %min% LSS 9 If %min% GTR 0 If DefIned HostedNetworkClient%min% If Not DefIned HostedNetworkClient%1 (
Set HostedNetworkClient%1=%A1%
For /f "Eol=; Tokens=1* Delims==" %%a In (%DataBase%) Do If %A1%==%%a (
Set "Client%1=%%b"& Exit /b) Else Set "Client%1=Клієнт [%A1%] не знайдений в базі даних"
Exit /b)
If %min% EQU 0 If DefIned HostedNetworkClients If Not DefIned HostedNetworkClient%1 (
Set HostedNetworkClient%1=%HostedNetworkClients%
For /f "Eol=; Tokens=1* Delims==" %%a In (%DataBase%) Do If %HostedNetworkClients%==%%a (
Set "Client%1=%%b"& Exit /b) Else Set "Client%1=Клієнт [%HostedNetworkClients%] не знайдений в базі даних"
Exit /b
)
Exit /b

:M3
If "%Interface:~-26%"==" interfaces on the system:" If "%Interface:~0,10%"=="There are " Set "N=%N:~0,-26%"
If %N% LEQ 9 (
If %N% EQU 0 Set Ending=ів& Exit /b
If %N% EQU 1 Set Ending=& Exit /b
If %N% GEQ 2 If %N% LEQ 4 Set Ending=и& Exit /b
If %N% GEQ 5 If %N% LEQ 9 Set Ending=ів& Exit /b)
If %N% GTR 9 (
If %N:~-2,1% EQU 1 Set Ending=ів& Exit /b
If %N:~-2,1% GEQ 2 (
If %N:~-1% EQU 0 Set Ending=ів& Exit /b
If %N:~-1% EQU 1 Set Ending=& Exit /b
If %N:~-1% GEQ 2 If %N:~-1% LEQ 4 Set Ending=и& Exit /b
If %N:~-1% GEQ 5 If %N:~-1% LEQ 9 Set Ending=ів& Exit /b)
If %N:~-2,1% EQU 0 (
If %N:~-1% EQU 0 Set Ending=ів& Exit /b
If %N:~-1% EQU 1 Set Ending=& Exit /b
If %N:~-1% GEQ 2 If %N:~-1% LEQ 4 Set Ending=и& Exit /b
If %N:~-1% GEQ 5 If %N:~-1% LEQ 9 Set Ending=ів& Exit /b)
)
Вдобавок выкладу созданные исполняемые файлы скомпилированные программой "Bat To Exe Converter v3.2.0.0" с использованием только этих кодов и иконки, с названием в шапке справа "WLAN Info En-Ru-Ua 1.0.rar"
MD5 хеш-сумма f5a4787be51a858a1b876495e0966f3c

Iska
08-11-2020, 08:16
wareznik3dll, код оформляется не bold'ом, а тегом (http://forum.oszone.net/misc.php?do=bbcode#code).

Ответ: никак.

Другое дело, что сам код кривой. Нет никакой необходимости вызывать «Netsh Wlan Show Interfaces» по четыре раза на каждый чих:
[CODE]@echo off
setlocal enableextensions enabledelayedexpansion

title Проверка состояния Wi-Fi и уровня его сигнала.

:Repeat

netsh.exe wlan show interfaces | findstr.exe /i /r /c:"Имя:" /c:"Состояние:" /c:"SSID" /c:"Сигнал:"

echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.
>nul pause

goto :Repeat

endlocal
exit /b 0

wareznik3dll
11-11-2020, 13:56
Iska, Большое спасибо за подсказки по оформлению (уже исправил) и использованию команды "FindStr".
Извините, но мой код кривой по Вашему мнению лишь потому что четыре раза вызывает "Netsh Wlan Show Interfaces" я не считаю что в этом заключается какая то кривизна а вот Ваш код при использовании кодовой страницы 1251 (Windows-1251) выдает:

SSID : Бла-бла
BSSID : Там-тара-рам
Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.

А где же значения? :

Количество проверок : 1
Имя : Беспроводное сетевое соединение
Состояние : Подключено
Сигнал : 78%

И зачем мне значение:
BSSID : Там-тара-рам

wareznik3dll
11-11-2020, 14:26
Iska, походу команда "FindStr" понимает только "OEM 866" из кириллицы, потому как мне нужно было использование именно кодовой страницы "Windows-1251" мною и было принято использование именно указанного кода с использованием команды "Find".

Iska, по поводу вызова четыре раза "Netsh Wlan Show Interfaces" объясню кратко, нужно лишь для получения значений для каждой переменной которые в свою очередь нужны для более правильного и красивого (не разбросанного) отображения нужной информации и в нужном на мой взгляд порядке размещения.

В итоге:
Ничего кривого в своём коде не обнаружил.

wareznik3dll
11-11-2020, 15:22
Код для проверки состояния Wi-Fi и уровня его сигнала с отображением даты и времени проверки:

@Echo Off
SetLocal EnableExtensions & REM Использование дополнительных ключей.
Chcp 1251 >Nul
Title Проверка состояния Wi-Fi и уровня его сигнала.
Mode Con: Cols=78 Lines=11
Set Count=1
:Check
For %%n In ("Имя" "Состояние:" " SSID" "Сигнал") Do (
For /f "Tokens=1,* Delims=: " %%a In ('Netsh Wlan Show Interfaces ^| Find /i %%n') Do (
If %%n=="Имя" (
Set "Name=%%b"
)
If %%n=="Состояние:" (
Set "State=%%b"
)
If %%n==" SSID" (
Set "SSID=%%b"
)
If %%n=="Сигнал" (
Set "Signal=%%b"
)
)
)
Echo Проверка : %Count%
Echo Дата : %Date%
Echo Время : %Time%
Echo.
Echo Имя : %Name%
Echo SSID : %SSID%
Echo Состояние : %State%
Echo Сигнал : %Signal%
Echo.
Echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.
Set /a Count+=1
Pause >Nul
Goto Check

wareznik3dll
11-11-2020, 15:41
Приму и отвечу на любые замечания.
Заранее благодарен всем неравнодушным.

Iska
11-11-2020, 22:56
а вот Ваш код при использовании кодовой страницы 1251 (Windows-1251) выдает: »
Это Ваши проблемы, коллега, что Вы решили использовать не предназначенную кодовую страницу для сохранения пакетного файла.

И зачем мне значение:
BSSID : Там-тара-рам »
Добавьте выделенное:
@echo off
setlocal enableextensions enabledelayedexpansion

title Проверка состояния Wi-Fi и уровня его сигнала.

:Repeat

netsh.exe wlan show interfaces | findstr.exe /i /r /c:"Имя:" /c:"Состояние:" /c:"SSID" /c:"Сигнал:" | find.exe /i /v "BSSID"

echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.
>nul pause

goto :Repeat

endlocal
exit /b 0

wareznik3dll
12-11-2020, 10:23
Это Ваши проблемы, коллега, что Вы решили использовать не предназначенную кодовую страницу для сохранения пакетного файла. >
Во первых спасибо Вам за критику а вот по поводу что я использую непредназначенную кодовую страницу это как то не вяжется бывает нужно использовать и кодовую таблицу 65001 (UTF-8) а также и любые другие, не мне Вам объяснять я вижу Вы очень смышленый человек и очень многое понимаете (сказано не в насмешку).
netsh.exe wlan show interfaces | findstr.exe /i /r /c:"Имя:" /c:"Состояние:" /c:"SSID" /c:"Сигнал:" | find.exe /i /v "BSSID" >
В этом месте я бы сократил Ваш код для быстроты (зачем лишнее) на:
netsh.exe wlan show interfaces | findstr.exe /i /r /c:"Имя" /c:"Состояние:" /c:" SSID" /c:"Сигнал"
Вместо "Имя:" достаточно "Имя"
"Состояние:" так и нужно оставить потому как есть строка "Состояние размещенной сети: ..." дабы не выдало нам ети две строки вместо одной, так само, как и в случае с "BSSID : ..." и "SSID : ..."
Вместо "SSID" нужно вначале просто добавить пробел " SSID" дабы не было сходства с "BSSID"
Вместо "Сигнал:" достаточно "Сигнал"

Вдобавок отображение инфы в Вашем коде согласитесь выглядит ну очень уж разбросанным
Как рас таки для этого в моём коде в цикле и используется 4 раза обращение к "Netsh Wlan Show Interfaces".

Busla
12-11-2020, 11:56
Вместо "Сигнал:" достаточно "Сигнал" »
Что же вы остановились на пол-пути: можно ведь и Сигн написать ;-)

Iska
12-11-2020, 14:52
Iska, по поводу вызова четыре раза "Netsh Wlan Show Interfaces" объясню кратко, нужно лишь для получения значений для каждой переменной которые в свою очередь нужны для более правильного и красивого (не разбросанного) отображения нужной информации и в нужном на мой взгляд порядке размещения. »
Тогда Вам нужно научиться делать сие правильно.

а вот по поводу что я использую непредназначенную кодовую страницу это как то не вяжется бывает нужно использовать и кодовую таблицу 65001 (UTF-8) а также и любые другие, »
В данном случае нет ни малейшей необходимости использовать какую-либо иную кодовую страницу вместо OEM/866. Вы её, кстати, даже не возвращаете после отработки Вашего пакетного файла.

В этом месте я бы сократил Ваш код для быстроты (зачем лишнее) на: »
Потому что, это не лишнее.

Как рас таки для этого в моём коде в цикле и используется 4 раза обращение к "Netsh Wlan Show Interfaces". »
Вы продолжаете с завидным упорством использовать кривой алгоритм. Вот, смотрите, я беру приведённый Вами код, и делаю алгоритм прямым:
@Echo Off
SetLocal EnableExtensions & REM Использование дополнительных ключей.

rem Title Проверка состояния Wi-Fi и уровня его сигнала.
rem Mode Con: Cols=78 Lines=11
Set Count=1

:Check
For /f "Tokens=1,* Delims=: " %%a In ('Netsh Wlan Show Interfaces ^| findstr.exe /i /r /c:"Имя:" /c:"Состояние:" /c:"SSID" /c:"Сигнал:" ^| find.exe /i /v "BSSID"') Do (
If "%%a" equ "Имя" Set "Name=%%b"
If "%%a" equ "Состояние" Set "State=%%b"
If "%%a" equ "SSID" Set "SSID=%%b"
If "%%a" equ "Сигнал" Set "Signal=%%b"
)

Echo Проверка : %Count%
Echo Дата : %Date%
Echo Время : %Time%
Echo.
Echo Имя : %Name%
Echo SSID : %SSID%
Echo Состояние : %State%
Echo Сигнал : %Signal%
Echo.
Echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.
Set /a Count+=1
Pause >Nul
Goto :Check

Не нужно четырёх вызовов одной и той же команды с риском получения несогласованных данных. Совсем не нужно.

Впрочем, дело Ваше.

wareznik3dll
12-11-2020, 15:12
Что же вы остановились на пол-пути: можно ведь и Сигн написать ;-) »
Ну если уж на то пошло то можно и так ;-)
netsh.exe wlan show interfaces | findstr.exe /r /c:" Им" /c:"яние:" /c:" S" /c:"Си"
Но " S" лучше оставвить " SSID:" для избежания совпадений со строкой "Профиль : ..."
Ну вот как то так.

Iska
12-11-2020, 15:15
Ну если уж на то пошло то можно и так ;-) »
netsh.exe wl sh in
У кого толще Кто меньше? :lol:

alpap
12-11-2020, 15:43
чтобы не подумали что тоже могу только насмехаться:

@echo off
for /f "skip=1 tokens=1* delims=:" %%a in ('Netsh Wlan Show Interfaces^|find ":"') do call :# "%%a" "%%b"
pause& exit

:#
for /f "tokens=*" %%a in ("%~1") do for /f "tokens=*" %%b in ("%~2") do echo %%a|>nul findstr /ir /c:"SSID" /c:"BSSID" /c:"Профиль" && (
for /f %%i in ("%%a") do set "s=%%i: %%b"
) || (
set "s=%%a: %%b"
)
>>file.txt echo %s%
exit /b


или если только на экран и то что было запрошено (но в читабельном виде или для удобства взятия в переменную):

@echo off
for /f "skip=1 tokens=1* delims=:" %%a in ('Netsh Wlan Show Interfaces^|find ":"') do call :# "%%a" "%%b"
pause& exit

:#
for /f "tokens=*" %%a in ("%~1") do for /f "tokens=*" %%b in ("%~2") do echo %%a|>nul findstr /ir /c:"SSID" /c:"BSSID" /c:"Профиль" && (
for /f %%i in ("%%a") do set "s=%%i: %%b"
) || (
set "s=%%a: %%b"
)
echo %s%|findstr /ir /c:"Имя" /c:"Состояние:" /c:"SSID" /c:"Сигнал"
exit /b

wareznik3dll
12-11-2020, 16:07
Вы продолжаете с завидным упорством использовать кривой алгоритм. Вот, смотрите, я беру приведённый Вами код, и делаю алгоритм прямым: »

ОЧЕНЬ БОЛЬШОЕ СПАСИБО И ОТ ВСЕГО СЕРДЦА - эти Ваши слова натолкнули меня на упрощение своего кода до этого:
@Echo Off
SetLocal EnableExtensions & REM Использование дополнительных ключей.
Chcp 1251 >Nul
Title Проверка состояния Wi-Fi и уровня его сигнала.
Mode Con: Cols=78 Lines=11
Set Count=1
:Check
For /f "Tokens=1,2,* Delims=: " %%a In ('Netsh Wlan Show Interfaces') Do (
If %%a==Имя Set "Name=%%b %%c"
If %%a==Состояние If Not %%b==размещенной Set "State=%%b %%c"
If %%a==SSID Set "SSID=%%b %%c"
If %%a==Сигнал Set "Signal=%%b %%c"
)
Echo Проверка : %Count%
Echo Дата : %Date%
Echo Время : %Time%
Echo.
Echo Имя : %Name%
Echo SSID : %SSID%
Echo Состояние : %State%
Echo Сигнал : %Signal%
Echo.
Echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.
Set /a Count+=1
Pause >Nul
Goto Check

Как видете он ещё короче плюс вообще не использует ни более лёгкую "Find" ни потяжелее "FindStr"

Ещё раз благодарочка.
Как по мне такие дискусии должны приводить к совершенствованию кода.

alpap
12-11-2020, 16:31
нужна красота?
(код в кодировке OEM 866)

@echo off
for /f "skip=1 tokens=1* delims=:" %%a in ('Netsh Wlan Show Interfaces^|find ":"') do call :# "%%a" "%%b"

Echo Дата : %Date%
Echo Время : %Time%
Echo.
Echo Имя : %Имя%
Echo SSID : %SSID%
Echo Состояние : %Состояние%
Echo Сигнал : %Сигнал%
pause& exit

:#
for /f "tokens=*" %%a in ("%~1") do for /f "tokens=*" %%b in ("%~2") do echo %%a|>nul findstr /ir /c:"SSID" /c:"BSSID" /c:"Профиль" && (
for /f %%i in ("%%a") do set "%%i=%%b"
) || (
set "%%a=%%b"
)
exit /b

alpap
12-11-2020, 16:49
это не быстрее, но удобнее тем что очень легко добавить еще одну строку, без каких-то подобных извращений
If %%a==Состояние If Not %%b==размещенной Set "State=%%b %%c" »
например добавим BSSID:

@echo off
Title Проверка состояния Wi-Fi и уровня его сигнала.
Mode Con: Cols=78 Lines=11

Set Count=1
:Check
for /f "skip=1 tokens=1* delims=:" %%a in ('Netsh Wlan Show Interfaces^|find ":"') do call :# "%%a" "%%b"

Echo Проверка : %Count%
Echo Дата : %Date%
Echo Время : %Time%
Echo.
Echo Имя : %Имя%
Echo SSID : %SSID%
Echo BSSID : %BSSID%
Echo Состояние : %Состояние%
Echo Сигнал : %Сигнал%
Echo.
Echo Нажмите любую клавишу для обновления информации о состоянии и уровне сигнала.

Set /a Count+=1
pause>nul
Goto Check

:#
for /f "tokens=*" %%a in ("%~1") do for /f "tokens=*" %%b in ("%~2") do echo %%a|>nul findstr /ir /c:"SSID" /c:"BSSID" /c:"Профиль" && (
for /f %%i in ("%%a") do set "%%i=%%b"
) || (
set "%%a=%%b"
)
exit /b

wareznik3dll
12-11-2020, 17:01
По поводу использования кодовой страницы 1251 (Windows-1251)
Ответ: Хочу использовать для батника на украинском языке.

Но вообще то нужен батник на 65001" (UTF-8) для его упаковки программой "Bat To Exe Converter v3.2.0.0" к сожалению для этого подходит только она одна из возможных для выбора.
Хотя помнится в более старых версиях можно было выбратькак 1251 (Windows-1251) так и 866 (OEM 866).

alpap
12-11-2020, 17:12
для батника на украинском языке »
Windows-1251 - мимо, только utf-8

wareznik3dll
12-11-2020, 17:19
это не быстрее, но удобнее тем что очень легко добавить еще одну строку, без каких-то подобных извращений »

Пожалуйста уточните в каком Вашем коде не быстрее или в моём коде не быстрее?

И еще на мой взгляд у Ваших кодах более трёх цыклов "For" плюс ещё и "Call" в моём последнем коде всего один цикл "For" плюс ещё и без "Call". Я думаю Вы не упростили а усложнили.

Так как я не пробовал Ваш код, не могу Вас прямо в чём то осуждать. Если можно на словах объясните в чём изюминка Вашего кода в сравнении с моим. Заранее благодарен.

Windows-1251 - мимо, только utf-8 »

Об этом пожалуйста, если можно поточнее если можно в словах.

alpap
12-11-2020, 17:25
в чём изюминка Вашего кода в сравнении с моим »
в этом хотя бы
легко добавить еще одну строку, без каких-то подобных извращений »
не упростили а усложнили »
я и не собирался упрощать и даже говорил
это не быстрее, »
я хотел сделать удобнее и практичнее для использования и редактирования
------
а что, нужна для этого случая прям фантастическая скорость? А вот вывод нужного по требованию из моего кода можно и через параметры сделать, из Вашего даже не представляю.

если можно поточнее »
если просто составление bat, то 1251 пойдет, если винда на укр или скажем считать надо укр и вывести, то получалось только в utf-8




© OSzone.net 2001-2012