Ваши требования
По сути, у вас есть задача, которую вы хотите запустить, только если определенные условия ИСТИНА :
- Процесс должен быть запущен только если он подключен к определенной сети
- Процесс должен быть запущен, только если доступен определенный общий файловый ресурс
Потенциально
Вы можете использовать некоторую логику IF и просто проверить состояние условий и принять соответствующие меры, чтобы « выйти из обработки » или « продолжить обработку » остальной части определенной логики.
По сути, это будет., ,
ping
шлюз по умолчанию через его IP-адрес- проверьте кэш arp для MAC-адреса шлюза по умолчанию, переданного в FindStr
- Если MAC-адрес не найден, то
EXIT
- Если MAC-адрес найден, продолжайте обработку
- проверьте, существует ли доля UNC
- Если доля UNC не существует, то
EXIT
- Если общий ресурс UNC существует, продолжайте обработку, т. Е. Остальную часть логики
Предпосылки
Получите IPv4-адрес шлюза по умолчанию из
ipconfig
командыПолучить физический Mac-адрес из IP-адреса шлюза по умолчанию
- Запустите
ping
команду для IP-адреса шлюза по умолчанию - Запустите
arp -a
команду и обратите внимание,Physical Address
что IP-адрес совпадает со значением шлюза по умолчанию
- Запустите
Пакетный скрипт
Очевидно GatewayIP=
, что значения GWMacAddr=
, и FolderShr=
переменные должны быть установлены с точными значениями, чтобы это работало должным образом - я проверил и подтвердил, что это с моей стороны.
@ECHO ON SET GatewayIP=192.168.1.254 SET GWMacAddr=e1-c3-5b-ed-4d-61 SET FolderShr=\\machinename\sharename ping -n 02 %GatewayIP% arp -a | findstr /c:"%GWMacAddr%" IF NOT %ERRORLEVEL%==0 EXIT IF NOT EXIST "%FolderShr%" EXIT <Rest of batch logic here since both checks above passed> EXIT