2014-11-19 3 views
2

@echo отPass NetConnectionID к NETSH команды интерфейса в пакете

:: токенов = 2 указывает на то, что из всех лексем, которые обычно будут возвращены, мы только хотим второй :: delims == указывает на то, что строка должна быть разделена там, где есть символ = для/f "tokens = 2 delims ==" %% A in ('wmic nic where "netconnectionid like' %% '" get netconnectionid/value') do ( звоните: DHCP "%% а" ) пауза выход/б

: :: DHCP% ~ 1 относится к пихты st, введенный в функцию, но без кавычек netsh адрес интерфейса, адрес% 1 dhcp

ответ

1

Вы были очень близки. Самое главное, что вам нужно указать разделитель для использования для синтаксического анализа строки. Поскольку эта команда wmic будет возвращать строки, такие как «NetConnectionId = Подключение по локальной сети», вам нужно указать, что вы хотите разбить строку на = вместо таких пространств, как обычно.

Вторая вещь в том, что при вызове функции, вы можете получить доступ к параметрам, которые передаются в него с %1 для первого параметра, %2 для второго параметра и т.д.

@echo off 

:: tokens=2 indicates that of all the tokens that would normally be returned, we only want the second one 
:: delims== indicates that the string should be split up wherever there is an = symbol 
for /f "tokens=2 delims==" %%A in ('wmic nic where "netconnectionid like '%%'" get netconnectionid /value') do (
    call :dhcp "%%A" 
) 
pause 
exit /b 

:dhcp 
:: %~1 refers to the first parameter passed into the function, but without the quotation marks 
netsh interface set address %1 dhcp 
+0

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

+0

Возможно, кавычки были необходимы в конце концов. Удалите символ '~' из последней строки и посмотрите, работает ли это. – SomethingDark

+0

Кроме того, 'netsh interface /?' Сообщает мне, что ip не является допустимым параметром. Существуют ipv4 и ipv6, но вы не можете использовать их одновременно с настройками, поэтому удалите их. – SomethingDark