Настройка "Подключения по локальной сети" с помощью CMD
Подскажите пожалуйста можно ли с помощью cmd(bat)-файла настроить подключение по локальной сети, свойства "Протокола Интернета (TCP/IP)": IP-адрес, Маска подсети, Основной шлюз, Предпочитаемый DNS-сервер, Альтернативный DNS-сервер и т.д.
|
|
1.Настройте сеть (т.е. выставьте ip, subnet, gateway, dns, wins…)
2.Запустите command prompt - нажмите Win+R и введите cmd 3.Введите: netsh -c interface dump > c:/homesettings.txt Примечание: путь к файлу и его имя можете выбрать по своему желанию 4.Теперь настройте другую сеть - повторите шаги с 1 по 3 5.На desktop’е создайте ссылку (клик правой кнопкой мыши - New - Shortcut), которая будет указывать на %windir%\system32\netsh.exe -f c:\homesettings.txt Примечание: путь к файлу и его имя надо указать то же, что и в пункте 3 Для других компов меняем содержимое файлика homesettings.txt |
amel27 немного не разобрался, но ответ уже есть.
Большое спасибо doomspace за быстрый и очень полезный ответ, cmd я сам сваяю :) |
Итог, по заданному мной вопросу (составленный по ответу doomspace) :
Для снятие данных сетевых настроек, запускаем файл (cmd) Код:
@echo off Корректируем файл netsettings.txt оставив в нем нужные настройки. Примерно так Код:
# ----------------------------------------- Код:
@echo off Настройки изменены, спасибо doomspace. |
Еще одно решение, более гибкое и интерестное:
CMD-файл Код:
@echo off |
А в Висте все это будет работать?
|
Всех все устраивает в этих батниках?
Но они же не универсальны!!! И вся попа кроется в том что (лично я не знаю) как узнать название "Подключение по локальной сети". Ведь все мы не раз сталкивались с тем что у кого то это не "Подключение по локальной сети", а "Подключение по локальной сети 5" или еще хлеще "inet" ... и тому подобное Какая же это автоматизация ... если все равно лезешь и правишь ручками! :help: Если кто в курсе - подскажите. |
Цитата:
|
Цитата:
Код:
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^"NetConnectionStatus^=2^" get NetConnectionID /value') do echo %%a |
Цитата:
|
Сколько в гугле не смотрел но найти не могу ответ на свой вопрос:
Хранит ли реестр текущее состояние сетевого адаптера? Именно интересует есть ли такой параметр где бы отображалось при включенном кабеле (Link UP) одно значение и другое при Link Down (сетевой кабель не подключен) - другое ... Или какие могут быть варианты ... надо просто определять для отдельно каждого адаптера значение в Up или Down подключение ... ipconfig не предлагать ... нужно четкое получение состояния ... пробую писать прогу ))) :teeth: и getmac тоже не хочется ... |
Пару лет назад, появлялась необходимость в написании таких батников, хоть уже и всё сказано, всё же приведу свои примерчики, может быть будут полезны:
Код:
netsh interface ipv4 set address "Подключение по локальной сети" static 10.9.46.107 255.255.254.0 10.9.46.1 0 Код:
netsh interface ipv4 set address "Подключение по локальной сети" static 10.9.46.107 255.255.254.0 10.9.46.1 0 И т.д., /? в помощь. |
Цитата:
|
У меня на Windows 7 работает, просто окно быстро закрывается, в конце кода можно добавить pause для прочтения. Выдает название подключения по локальной сети, к которому подключен кабель. А можно сделать код который после определения активного сетевого подключения переименовывал его в конкретное имя, например "Inet"?
|
Вот как сделалать пришлось мне для одного ПК.
Кодировка DOS Код:
@echo off |
А как с помощью батника не только определить текущее название сетевого подключения и ввести его настройки, но и переименовать его из "Подключение по локальной сети", например, в "Интернет" ?
|
Nun-Nun, на основе этого скрипта делаем RenameNetworkConnection.vbs
Код:
If WScript.Arguments.Count <> 2 Then |
Попробовал. Ввёл в текст скрипта свои названия, скопировал скрипт в текстовый файл, сохранил как RenameNetworkConnection.vbs. Запустил этот файл из батника, и что-то не пошло - никакого переименования не происходит, а на экран выводится сообщение (см. скриншот):
|
Цитата:
Цитата:
Цитата:
|
Понял, исправил - всё работает!
|
Есть ещё один вопрос. Используя скрипты, приведённые в данной теме, попробовал объединить решение нескольких задач в одном батнике: определение названия сетевого соединения, смена названия сетевого соединения на своё и ввод параметров сетевого соединения. В итоге первые две задачи выполняются нормально, а вот с третьей что-то никак. Может кто подскажет, как это должно выглядеть, чтобы было правильно? Как задать значение (найденное название соединения), которое бы подставлялась в качестве первого параметра для RenameNetworkConnection.vbs ?
Код:
@echo off |
Nun-Nun, а если подключений несколько, какое выбирать?
|
Petya V4sechkin,
Правильно, как с этим быть я тоже не знаю. :cry: Да и не только это. Вон на скриншоте написано "Отсутствуют экземляры класса". Что за экземпляры, какого класса... - ... его знает?.. Я в этом деле ещё чайник. Мне бы для начала с одним (первым) подключением разобраться. Первым обычно идёт подключение для сетевой карты, потом вайфаи, синезубы и т.п. (я так думаю). |
Ну так что, по поводу подстановки переменной никто подсказать не может?
|
как вариант:
Код:
@Echo Off |
amel27,
Запускаю Ваш скрипт на Win7 x64 ... Вроде что-то делает, но не успеваю прочесть сообщение в консольном окне - пауза игнорируется и окно закрывается. На XP x32 мелькает название текущего соединения. Не совсем ясно, что именно скрипт делает - определяет настройки текущего соединения или его название? |
Вложений: 1
Подскажите пожалуйста. Как через cmd добавлять второстепенные шлюзы. В справке netsh я такого не нашел.
Вот скрин |
Цитата:
Код:
netsh int ip add address name="имя интерфейса" gateway=шлюз gwmetric=0 |
Работает. Спасибо.
|
у меня проблемы на вин7
при использовании netsh -c interface dump > netsettings.txt копируются не все параметры к примеру нету ни dns а при попытки установки настройки меняються на статичные но поля где доложны быть все ip пустые Код:
# ---------------------------------- Код:
# ----------------------------------------- сижу через маршрутизатор. |
Подскажите пожалуйста, как включить из батника сеть и выключить, соответственно из него же предварительно проверив состояние.
|
|
Увы, но у меня ничего неполучается, чтобы узнать имя подключения, мне нужно только посредством CMD. Есть у меня код, но он работает только на XP, а дело в том, что вывод IPCONFIG в XP и в Win7 разный.
Соответственно на Win7 я получаю неверное имя. Данный код на XP работать не хочет: Код:
Неизвестное исключительное состояние WMIC. |
boss911, у меня:
Цитата:
Цитата:
|
Цитата:
Код:
Неизвестное исключительное состояние WMIC. Код:
wmic path Win32_networkadapter Применение других скриптов, в отличие от CMD, мне не подходит. |
boss911, попробуйте восстановление WBEM.
|
Iska
Все сделал по инструкции (все прошло без сбоев), эффект все тот же. Да и чему ему ломаться, ОС недели три назад переустанавливал (оригинал XP SP3 VL + октябрьский UpdatePack). |
boss911,
Попробуй так: Код:
set "wmic=wmic path Win32_networkadapter where NetConnectionStatus="2" get NetConnectionID /value" |
Foreigner
Спасибо, но, увы. Я выше говорил, что проблема в том, что команда wmic path Win32_networkadapter у меня выдает такой результат: Код:
Неизвестное исключительное состояние WMIC. |
Цитата:
Цитата:
Смотрите версии файлов в папке \WINDOWS\system32\wbem Cimwin32.dll и т. д. |
Цитата:
Может дело в .NET 3.5 SP1 (с текущими на данный момент обновлениями)? |
boss911, попробуйте отключить антивирус/файрвол (если установлен).
А также с помощью Msconfig отключить сторонние (не Microsoft) программы и службы из автозагрузки. Цитата:
|
Petya V4sechkin
Выгрузка KIS12 ничего не дает. В msconfig я выбрал диагностический запуск, оно закричало, что не хватает прав остановить там какую-то службу и попросило, чтобы я зашел по админом (вообще-то я под админом сижу). ОС загрузилась "голой", выполнил данный код: Код:
ОШИБКА: Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Код:
< nul Set /P "Str=Останов службы "Инструментарий управления Windows"..." |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Логи wbem, логи Process Monitor. Проверил код у друга, у него работает. У него моя сборка XP SP3 VL + годичный UpdatePack (с тех пор обновы никакие не ставились) и очень похожий набор софта, как у меня, только у него, так же годичный NET 3.5 SP1. |
boss911, пока что в логе Process Monitor заметил две странности:
1. Обращение к библиотеке C:\WINDOWS\system32\HookDll.dll (непонятно, к чему она относится). 2. Сразу две загруженных библиотеки:
Впечатление такое, что WMIC.exe после обращения к ней завершает работу (идут операции Thread Exit). |
Цитата:
Я так понимаю, разрабы AverTV 5.5.0.25 криво написали инсталлятор, по идеи тот должен был проверить наличие в системе msxml3.dll и если его нет, ставить и регистрировать из своего дистрибутива. Теперь придется ковырять их MSI (удалять его от туда). В папке AverTV есть еще msxml3a.dll и msxml3r.dll (у них нет DllRegisterServer), я так понял, это часть MSXML3, только не понятно, что за файл "а", их тоже грохать? Насколько я понял, WMIC зависит от MSXML3, а у всех ли есть MSXML3, на каких ОС и на всех ли SP? В чистом XP SP3, точно знаю, что в составе есть. |
Имеется два сетевых интерфейса:
Код:
Подключение по локальной сети Код:
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^"NetConnectionStatus^=2^" get NetConnectionID /value') do set NETWORK=%%a Как с этим бороться, как ему жестко задать, что надо брать имя по списку которое первое, даже с вышеуказанным случаем? |
boss911, для получения нужной сортировки используйте «sort.exe». Но, думаю, дело не в этом.
|
Цитата:
Цитата:
От MSXML3 вообще много что зависит (например, IE и MMC). Цитата:
Цитата:
Любопытный случай (казалось бы, при чем тут WMIC и AverTV). Можно (было бы) писать статью типа "Дело о неработающем WMIC" (в стиле Марка Руссиновича). |
Цитата:
Код:
set NETWORK= |
Цитата:
Цитата:
|
Цитата:
Цитата:
Код:
Подключение по локальной сети Спасибо. Сейчас нет возможности проверить ваш код (у меня одна сетевая), появится возможность, проверю и отпишусь. Только что проверил, теперь все работает, как мне нужно, еще раз спасибо. |
El Sanchez
К сожалению, это метод работает по-разному. Если у меня между "Подключение" и "Подключение 2" выбирается первое, то на другом компе уже выбирается второе. Если использовать этот код, то ситуация уже совсем противоположна будет. Я не понимаю, из-з чего это зависит. То есть, нет четкой уверенности, что всегда будет выбрано первое подключение по списку имен. Дело в том, что на каждом компьютере по-разному выводит порядок NetConnectionID, если у меня так выводит: Код:
NetConnectionID=Подключение 2 Если это возможно, помогите решить этот вопрос. Как к этому прикрутить SORT.EXE я не знаю. |
Код:
for /f "tokens=2 delims==" %%a in ( На вышеприведённом коде сие будет выглядеть: Код:
@echo off |
Код:
for /f "tokens=2 delims==" %%a in ( В данном случае, сортировка явно боком работает, аналогично, если названо "Lan" и "Lan 2", первым в списке "Lan 2". Где тут логика или сортировка работает через одно место? Кстати, в вашем примере похожий случай. |
Цитата:
Код:
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^"NetConnectionStatus^=2^" get NetConnectionID /value') do set NETWORK=%%a Код:
set NETWORK= Цитата:
Код:
wmic path Win32_networkadapter where "NetConnectionStatus=2" get NetConnectionID,DeviceID /value |
El Sanchez
То, что вы написали, я это примерно для себя понимал, посему и написал, что вся соль в том, что NetConnectionID выводит имена не по имени подключений, а, как я для себя выяснил из ваших слов, по уникальному индексу. Iska предложил делать сортировку через SORT.EXE, но он не сортирует, как того хотелось бы, по логике, подключение "Подключение по локальной сети" без цифры в конце этого имени, всегда самым последним. Хотел решить вопрос через sort.exe /+n но тут надо знать количество символов самого длинного имени, блин. |
Цитата:
|
boss911, проблема не в «sort.exe», проблема в связке особенностей вывода «wmic.exe» и разбора «for /f».
Попробуйте использовать вывод в промежуточный временный файл, наподобие: В Вашем случае код может быть примерно таким: Код:
@echo off |
Iska
Спасибо, теперь вроде работает как нужно. Сделал для себя немного компактнее код: Код:
@Echo off |
Цитата:
Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 and AdapterTypeID=0" GET NetConnectionID /VALUE |
El Sanchez
Классы я уже видел, но вот как их правильно юзать, не вкуриваю. С вашим кодом все равно выводит 1394 подключение. Снова курю классы, но что-то не курится. Какое бы значение я не ставил, всегда "Отсутствуют экземпляры класса" (наверное, я чего-то не понимаю). Ключ /r для sort.exe я пробовал, он пригоден только в одном случае, если же подключения названы немного по-другому, он будет только мешать. Не выход. Пока что правильно сортирует имена подключений код, который мне подсказал Iska. |
boss911, может, ещё раз опишете, что Вы хотите получить? Я, например, вовсе запамятовал.
|
Iska
Код:
WMIC PATH Win32_networkadapter WHERE "NetConnectionStatus=2" GET NetConnectionID /VALUE Мне нужно, чтобы 1394 я не видел в этом списке, точнее сказать, применив этот код, оно игнорировало это подключение. Цитата:
|
boss911, я имел в виду — словами. Чем отличаются те соединения, которые нужно оставить, от тех, которые нужно убрать? Каковы критерии?
|
Цитата:
Фильтрацию по имени проводить - последнее дело, но раз так нужно, то: Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 AND NOT NetConnectionID LIKE '%1394%'" GET NetConnectionID /VALUE |
El Sanchez, к сожалению, что у меня, что, надо полагать, у коллеги boss911, данное сетевое соединение, будучи подключённым, имеет тип сети («Ethernet 802.3»). Скорее всего, что драйвер говорит провайдеру Wbem, то и получаем.
boss911, увы :(. |
Цитата:
Цитата:
|
Цитата:
Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 AND NOT NetConnectionID LIKE '%1394%' AND NOT NetConnectionID LIKE '%VirtualBox%'" GET NetConnectionID /VALUE Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 AND PNPDeviceID LIKE 'PCI\\VEN%'" GET NetConnectionID /VALUE |
El Sanchez, логично. А, может быть, даже наоборот, отсекать, содержащие:
Код:
NetConnectionID PNPDeviceID |
Кажись начинают нервы сдавать. Беру этот код (точно рабочий) и меняю в нем строку на эту (пару постов выше):
Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 AND PNPDeviceID LIKE 'PCI\\VEN%'" GET NetConnectionID /VALUE >%TemporaryName% Код:
Узел - HOME |
boss911, в том скрипте у Вас не указано «@echo off», и, тем не менее, Вы не видите ошибки?! Удваивайте в пакетных файлах символ «%» там, где потребно:
Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 AND PNPDeviceID LIKE 'PCI\\VEN%%'" GET NetConnectionID /VALUE >%TemporaryName% |
Цитата:
К сожалению, я не разбираюсь, в каких случаях, где потребно, удваивать знак «%», хоть и знал о таком нюансе. Спасибо. |
Цитата:
|
Пытался сделать так, чтобы оно мне выводило сообщение: Код:
Сетевое подключение не найдено или оно не подключено. В общем, нужно сделать, чтобы при не нахождении подключения или его отключенности, а может и при какой-то другой ошибки (не столь важно), оно мне говорило то, что я написал выше. |
Цитата:
А по вопросу постом выше кто-то сможет помочь, плиз? |
Цитата:
P.S. Запустите у себя в консоли Код:
WMIC PATH Win32_NetworkAdapter WHERE "PNPDeviceID LIKE 'PCI\\VEN%'" GET /VALUE |
Цитата:
Мне бы вот, чтобы вместо ошибки, оно писало "Сетевое подключение не найдено или оно не подключено". Под ошибкой подразумевается, что подключение отключено или оно вообще не нашло подключений или при другой любой ошибки. |
Цитата:
Код:
For /F "Tokens=1* Delims==" %%A In ('WMIC PATH Win32_NetworkAdapter WHERE ^"NetConnectionStatus^!^=2 AND PNPDeviceID LIKE ^'PCI\\VEN%%^'^" GET NetConnectionID /Value 2^>nul^|FindStr .') Do Call Echo.%%B отключено |
El Sanchez
Сетевое подключение включено: Код:
Подключение по локальной сети отключено Мне нужно наоборот. Если подключение не обнаружено или оно отключено, пусть выводит "Отключено", если все нормально, пусть ничего не выводится. |
Цитата:
Код:
@echo off |
Foreigner
Что-то не так, долго пояснять, лучше посмтотрите сами (подключение включено). В конец батника я добавил PAUSE. Это не весь лог, еще несколько раз я жал любую клавишу. А может сделать проще. Я напомню, что в своем батнике я буду использовать этот код. Так вот, если в %TemporaryName% не будет найдено 'NetConnectionID', то оно выводит "Отключено" (и pause & exit), если нашло, то батник продолжает работу. Я представляю это сделать через FINDSTR, но боюсь, что не справлюсь или это будет жутко коряво. Прошу помочь именно в этом направлении, плиз. |
Цитата:
|
|
Цитата:
|
El Sanchez
Спасибо, теперь работает. Скажите, а можно вот эту строку: Код:
FOR /F "Tokens=1* Delims==" %%A IN ('WMIC PATH Win32_NetworkAdapter WHERE ^"NetConnectionStatus^^!^=2 AND PNPDeviceID LIKE ^'PCI\\VEN%%^'^" GET NetConnectionID /VALUE 2^>nul^|FindStr .') DO CALL ECHO Отключено Код:
WMIC PATH Win32_NetworkAdapter WHERE "NetConnectionStatus=2 AND PNPDeviceID LIKE 'PCI\\VEN%%'" GET NetConnectionID /VALUE 2>nul >%TemporaryName% В том плане, чтобы два раза не гонять WMIC. Если подключение отключено, то оно выводит "Отключено", если все в порядке, то записывает имя подключения в %TemporaryName%. Мне немного стыдно, но чего-то не могу сообразить как. |
читал читал и ни че не получилось че то-(((
дайте мне пож универсальный код для следующего... Как можно командной строкой изменить имя сетевого интерфейса ? и еще условыя такие... Неизвестно текущее имя интерфейса и надо независимо от того как они у кого названы переименовать в новое. Т.е. команда по выводу текущего имени и переименовании на новую которую ми хотим и после этого только уже настраивать так как нужно зная уже конкретное имя.. в итоге хочу применитьвот эти команды.. netsh interface ipv4 set address name="Новое_название" source=static addr=10.177.188.24 mask=255.255.254.0 gateway=10.177.188.1 netsh interface ipv4 set address "Новое_название" static 10.177.188.24 255.255.254.0 10.177.188.1 route add -p 0.0.0.0 mask 255.255.254.0 10.177.188.1 все это должно работать универсально как на XP так и на 7... желательно организовать в cmd файлике.. очень надеюсь на вашу помощь... вот здесь осужали по этому по поводу но ни как ни че не получилось http://social.technet.microsoft.com/...a-aa20152c93b7 поделитесь пож рабочим кодом |
Приветствую.
Задача такова: Имена компьютеров вида E1-x, гдe x - числовое значение от 1 до 30 IP адрес напрямую зависит от имени компьютера, и его присвоение хотелось бы автоматизировать. Set i="100+%computername:~0,3%" netsh interface ip set address "Подключение по локальной сети" static 192.168.0.%i% 255.255.255.0 192.168.0.10 0 Понимаю, что ошибка тут: ...92.168.0.1%i%... Но не понимаю, как правильно. Заранее спасибо за науку. |
Цитата:
Тогда: Код:
Set /a i=100+%computername:~1% Код:
Set /a i=100+%computername:~3% |
Огромное спасибо.
Всё оказалось так просто... |
Время: 06:35. |
Время: 06:35.
© OSzone.net 2001-