Был там, сделал это.
Сначала проверьте / подождите, если ваша сеть действительно подключена в первую очередь, и если у вас есть TCPIP. (В случае подключения Wi-Fi после входа в систему ваш сценарий может запуститься до того, как Wifi начнет работать.)
Выходные данные "ipconfig" (БЕЗ параметра / all) будут отображать только те интерфейсы, которые имеют ВВЕРХ, и предоставят ip-адрес шлюза по умолчанию.
Затем пропингуйте этот шлюз по умолчанию, который должен быть вашим маршрутизатором (я предполагаю, что он всегда включен).
Затем выполните grep для вывода «arp -a», чтобы увидеть, есть ли там MAC-адрес вашего роутера. (Если вы используете как проводной, так и беспроводной, проверьте оба MAC-адреса. Они, вероятно, не то же самое.)
Эта проверка MAC-адреса также обнаруживает случай, когда вы находитесь в чужой сети, когда у маршрутизатора тот же IP-адрес, что и у вас дома.
И нет необходимости делать это 4 раза с задержками (я полагаю, что это попытка вывести HTPC из режима ожидания при необходимости). Достаточно одного пинга (который в Windows делает 4 пинга с задержкой в 1 секунду) маршрутизатору достаточно.
Маршрутизатор будет либо отвечать (так что вы можете проверить MAC), либо не будет, в этом случае что-то действительно не так с сетью, и это в любом случае непригодно для использования.
Код ниже протестирован на Windows 10. Я уверен, что это будет работать на любой версии Windows NT.
@echo off
set mymac=ac-9e-17-96-6e-60
set delayedexpansion=on
rem Pull the default gateways from ipconfig and extract the one with a value.
rem Carefull! There is 1 extra space before the ip-address.
for /F "delims=: tokens=2 usebackq" %%a in ( `ipconfig ^| find /I "default gateway"` ) do (
if NOT "%%a."==" ." set IP=%%a
)
echo Default gateway:%IP%
rem Ping it to make sure it appears in arp -a output
ping -n 1 %IP% >nul
rem Filter the line with the ip-address and MAC from arp -a and take action if found
arp -a | find /I "%IP%" | find /I "%mymac%"
if errorlevel 1 (echo Not found: Not at home) else ( echo I'm at home)