Как мне установить переменную в командной строке Windows на IP?

Есть ли простой способ получить IP-адрес от моего поставщика услуг и поместить его в переменную через командную строку? Что-то вроде следующего:

SET hostIP = nslookup \address
ECHO %hostIP%

Или же

SET hostIP = ipconfig \address
ECHO %hostIP%

4 ответа

Решение
for /f "skip=1 tokens=2 delims=: " %f in ('nslookup %COMPUTERNAME% ^| find /i "Address"') do echo %f

Ответ Аруна хороший, но я обнаружил, что использование NSLOOKUP создает ложную запятую после имени хоста, когда более одного IP назначено / связано с данным хостом.

Тем не менее, я нашел другой способ, который разрешает (первый назначенный) IP-адрес с заданным именем хоста и не генерирует мошенническую запятую - он использует PING. Очень быстро, очень надежно.

for /f "tokens=2 delims=[]" %f in ('ping -4 -n 1 %COMPUTERNAME% ^| find /i "pinging"') do echo IP=%f

Он генерирует простой IPv4-адрес для имени хоста в переменную IP. Если вы затем сделаете ECHO %IP%, он покажет вам IP как: IP=192.168.1.2

Конечно, в пакетных сценариях вам нужно будет заменить один%f на %%f. Обратите внимание на карат ("^") перед символом канала ("|"), который требуется в пакетных сценариях, чтобы они не интерпретировали канал, а вместо этого направляет результаты оператора ping в оператор find.

Попробуйте пакет, как этот, чтобы установить переменные среды:

ipconfig > ipconfig.out
setx IPADDR /f ipconfig.out /a 7,13
setx IPADDR /f ipconfig.out /a 7,14
setx IPMASK /f ipconfig.out /a 8,14

Выйдите из командной строки и откройте новую. Используйте SET и найдите IPADDR и IPMASK, которые сейчас являются постоянными. Чтобы обновить переменные, вам нужно будет повторно запустить пакет и выйти из командной строки. Различные показанные координаты учитывают различия в выводе IPCONFIG для Windows 2003 по сравнению с Windows 2008 (должны работать в XP/7 таким же образом). Записывается только найденное значение, поэтому неудачная строка не вредит, если ничего не найдено. Добавьте шлюз с помощью:

setx IPGATE /f ipconfig.out /a 9,12

Если бы вы могли использовать bash (как в cygwin), это легко было бы сделать с помощью обратных тиков, чтобы выполнить все, что вы хотите в строке SET hostIP.

Как в

export hostIP = `curl 'http://whatsmyip.net' | grep '<title' | awk '{print $8}' | sed -e 's:<.*::g'`
Другие вопросы по тегам