Как мне установить переменную в командной строке 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'`