Я уже рассказывал о том, как немного автоматизировал ввод одних и тех же данных (IP-address, Mask, Default Gateway, DNS Server) с помощью утилиты netsh. Однако для того, чтобы автоматизировать процессы полностью мне нужно было несколько bat-файлов. А хотелось только один... Мне требовалось минимум 4 файла: один для подключения к локальной сети дома, второй для сети на работе, третий для проверки DHCP и четвертый для настройки модемов с адресом 192.168.1.1. Оказалось, что эти файлы занимают много места на рабочем столе :). И мне показалось, что bat-файлы должны помочь разрешить это. И верно! Погуглив немного я обнаружил, что bat-файлы имеют поддержку пользовательского ввода с помощью команды "set /p choice=Prompt string", где "choice" - переменная в которую записываются пользовательские данные, а "Prompt string" - подсказка для пользователя
Используя эту возможность я объединил все мои файлы в один, гораздо более удобный. Начинается он с двух команд, которые отображают текущее состояние моего сетевого интерфейса:
netsh interface ipv4 show ipaddresses "Local Area Connection" normal
netsh interface ipv4 show dnsservers "Local Area Connection"
Затем я вывожу на экран список доступных действий с помощью следующих команд:
ECHO.
ECHO 1. 192.168.1.2 (gw=254)
ECHO 2. Working IP
ECHO 3. Dynamic (DHCP)
ECHO 4. 192.168.1.2 (gw=1)
ECHO 0. Exit
И, наконец, мы подходим собственно к выбору необходимый действий:
set /p choice=Enter the number of your choice:
Теперь необходимо отреагировать на ввод пользователя:
if '%choice%'=='1' goto one
if '%choice%'=='2' goto two
if '%choice%'=='3' goto three
if '%choice%'=='4' goto four
if '%choice%'=='0' goto end
Каждая строчка сравнивает введенное пользователем значение с 1, 2, 3, 4 и 0. Если сравнение дает положительный результат, то происходит переход к нужной метке (one, two, three, four или end). Строка
ECHO 1. 192.168.1.2 (gw=254)
означает, что выбрав пункт 1, компьютеру будет присвоен IP-адрес 192.168.1.2, а Основной шлюз (Default Gateway) будет 192.168.1.254. Если пользователь введет цифру 1, то первое же сравнение
if '%choice%'=='1' goto one
даст положительный результат и мы перейдем к метке "one".
:one
netsh interface ipv4 set address name="Local Area Connection" static 192.168.1.2 255.255.255.0 192.168.1.254
netsh interface ipv4 set dnsserver "Local Area Connection" static none
netsh interface ipv4 add dns "Local Area Connection" 212.19.149.178 1
netsh interface ipv4 add dns "Local Area Connection" 192.168.1.254 2
goto end
Первая строчка - собственно метка, вторая задает IP-адрес, маску сети и основной шлюз. Третья - очищает список DNS-серверов, затем на первое место ставится DNS 212.19.149.178, а на второе 192.168.1.254 (мой домашний модем Billion). И последняя строчка отсылает нас к метке end для завершения выполнения программы.
Остальные конфигурации идентичны, кроме DHCP:
netsh interface ipv4 set address name="Local Area Connection" source=dhcp
netsh interface ipv4 set dns name="Local Area Connection" source=dhcp
А вот, собственно, и все содержание моего bat-файла.
@ECHO off
cls
netsh interface ipv4 show ipaddresses "Local Area Connection" normal
netsh interface ipv4 show dnsservers "Local Area Connection"
ECHO.
ECHO 1. 192.168.1.2 (gw=254)
ECHO 2. Working IP
ECHO 3. Dynamic (DHCP)
ECHO 4. 192.168.1.2 (gw=1)
ECHO 0. Exit
set choice=
set /p choice=Enter the number of your choice:
if '%choice%'=='1' goto one
if '%choice%'=='2' goto two
if '%choice%'=='3' goto three
if '%choice%'=='4' goto four
if '%choice%'=='0' goto end
:one
netsh interface ipv4 set address name="Local Area Connection" static 192.168.1.2 255.255.255.0 192.168.1.254
netsh interface ipv4 set dnsserver "Local Area Connection" static none
netsh interface ipv4 add dns "Local Area Connection" 212.19.149.178 1
netsh interface ipv4 add dns "Local Area Connection" 192.168.1.254 2
goto end
:two
netsh interface ipv4 set address name="Local Area Connection" static x.x.x.x x.x.x.x x.x.x.x
netsh interface ipv4 set dnsserver "Local Area Connection" static none
netsh interface ipv4 add dns "Local Area Connection" x.x.x.x 1
goto end
:three
netsh interface ipv4 set address name="Local Area Connection" source=dhcp
netsh interface ipv4 set dns name="Local Area Connection" source=dhcp
goto end
:four
netsh interface ipv4 set address name="Local Area Connection" static 192.168.1.2 255.255.255.0 192.168.1.1
netsh interface ipv4 set dnsserver "Local Area Connection" static none
netsh interface ipv4 add dns "Local Area Connection" 212.19.149.178 1
netsh interface ipv4 add dns "Local Area Connection" 192.168.1.1 2
goto end
:end
timeout 5
Хочу обратить внимание, что писалось и тестировалось сие творение на Windows Vista, если кто-то адаптирует этот скрипт для XP, то не забудьте сообщить мне об этом :).
И еще. На самом деле я пользуюсь другим скриптом, немного измененным, но и о нем я скоро расскажу. Комментарии, оценки, пожелания и не только - приветствуются.
|