Пакетная обработка — поиск сетевого IP-адреса компьютера по имени компьютера

Я НАЧИНАЮЩИЙ СТУДЕНТ по пакетному написанию сценариев. У меня проблема в том, что я могу получить имя компьютера из своей локальной сети, проверив его IP-адрес (см. код ниже). Однако я изо всех сил пытаюсь найти столь же простой способ получить IP-адрес компьютера в моей сети при использовании имени компьютера. Насколько я вижу, пингование имени компьютера предоставляет только MAC-идентификатор, но не IP.

Причина, по которой мне нужна эта функция, заключается в том, что я пишу небольшой пакетный сценарий, который запрашивает у пользователя либо IP-адрес, либо имя компьютера для обмена сообщениями (msg.exe). Последующие конфигурации (проверки TTL и изменения раздела реестра) явно требуют того или иного.

@echo off
for /f "tokens=1,2" %%a in ('ping -a 192.168.1.33  ^| find "Pinging"') do set compname=%%b >nul
echo Computer name is %compname%
echo.
pause

person Albert F D    schedule 13.03.2015    source источник
comment
Пожалуйста, сразу же проясните одну вещь: пакетные сценарии не являются MS-DOS. То, что это белый текст на черном фоне, не означает, что это DOS. DOS не входит в состав Windows уже несколько поколений. Пакетные файлы запускаются под командным интерпретатором.   -  person Jonathon Reinhart    schedule 13.03.2015
comment
Спасибо, я уже некоторое время работаю над этой ложной идеей. Я отредактировал свой вопрос соответственно. Я сделаю то же самое в своем профиле.   -  person Albert F D    schedule 13.03.2015
comment
Это распространенное заблуждение, так что не расстраивайтесь. Но это очень нужно ломать.   -  person Jonathon Reinhart    schedule 13.03.2015
comment
Я согласен, я рад, что вы это прояснили, однако я не ошибусь, если подумаю, что cmd.exe поддерживает большинство тех же команд и некоторую совместимость с DOS, верно?   -  person Albert F D    schedule 13.03.2015
comment
Подавляющее большинство команд DOS также существуют в пакетном режиме. 64-разрядные операционные системы не могут использовать команду debug, и в пакете есть несколько новых команд, которых нет в DOS (например, различные флаги для команды for), но в целом они в основном такой же.   -  person SomethingDark    schedule 13.03.2015
comment
Кроме того, ping не должен возвращать MAC-адрес. Вы уверены, что это не просто значение IPv6? Попробуйте ping -4 и посмотрите, даст ли это желаемый результат.   -  person SomethingDark    schedule 13.03.2015
comment
Спасибо! Оно работает! ...выложу рабочий скрипт как можно скорее. Еще раз спасибо Что-то темное. (Я проголосовал за ваш комментарий как за полезный, потому что не пометил его как вариант ответа).   -  person Albert F D    schedule 13.03.2015


Ответы (1)


Спасибо SomethingDark за решение:

@echo off
for /f "tokens=1,2 delims=[]" %%a in ('ping -4 COMPNAME  ^| find "Pinging"') do set ipaddress=%%b >nul
echo COMPNAME IP address is %ipaddress%
echo.
pause

На самом деле, показывая мне вариант:

 ping -4

Я могу найти состояние "TTL=", пропинговав таким образом имя компьютера. Следовательно, мне больше не нужно преобразовывать имя компьютера в IP-адрес, это сделает мой окончательный сценарий короче. Спасибо!

person Albert F D    schedule 13.03.2015
comment
Это также стоит упомянуть (для таких новичков, как я, которые могут столкнуться с подобными проблемами). Я обнаружил, что, отключив IPv6 в настройках моего беспроводного сетевого адаптера (средство, с помощью которого я подключаюсь к своей локальной сети), я больше не получаю адрес IPv6 при проверке связи с именем компьютера, а требуемый IPv4. - person Albert F D; 14.03.2015