Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Получить имя ПК по IP адресу в локальной сети.

Ответить
Настройки темы
Любой язык - [решено] Получить имя ПК по IP адресу в локальной сети.

Аватара для f0r_ce

Пользователь


Сообщения: 55
Благодарности: 2

Профиль | Отправить PM | Цитировать


Здравствуйте. Помогите, пожалуйста, найти способ получения имени компьютера в сети по известному IP адресу.
В итоге требуется скопировать имя ПК в буфер обмена. Но для начала, мне бы найти способ извлечь имя ПК по IP адресу.
При выполнении команды ping -a <ip адрес> получается слишком много данных. Не могу придумать как из них выделить только имя ПК и передать в переменную.

Отправлено: 12:48, 19-02-2019

 

Аватара для f0r_ce

Пользователь


Сообщения: 55
Благодарности: 2

Профиль | Отправить PM | Цитировать


megaloman, спасибо за код. Только хотелось бы, чтобы после имени ПК не вставлялся символ перевода строки и возврата каретки.

Отправлено: 11:59, 22-02-2019 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для f0r_ce

Пользователь


Сообщения: 55
Благодарности: 2

Профиль | Отправить PM | Цитировать


Вот такой код получился.
Код: Выделить весь код
:: Копировать в буфер обмена имя ПК с параметром в виде имени ПК при запуске данного файла
:: отключение вывода не информативных строчек
@echo off >nul
if "%1"=="" (set INFO=echo && set THEEND=1) else (set INFO=rem && set THEEND=0)
%INFO% ***********************************************************************
%INFO% *
%INFO% * Не введён параметр - IP ПК
%INFO% *
%INFO% ***********************************************************************
if "%THEEND%"=="1" (echo Ошибка: Задайте имя компьютера!)&(goto :exit)

Set "IP=%1"
:: с помощью ping извлекаем имя ПК из IP
:: Если вместо %переменная% взять %переменная:~начало,длина% - получим часть строки сначала, если со знаком минус, то с конца
	chcp 437 >nul
	Set "Key1=Pinging"
	Set "IPname=Not Found"
	FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`2^>nul Ping  -a -n 1 -4 %IP%`) DO (
		If /I "%Key1%"=="%%i" If /I "[%IP%]"=="%%k" Set "IPname=%%j"
	)
:: берём только часть имени ПК до точки
FOR /F "delims=." %%i IN ("%IPName%") Do Set "IPName=%%i"
Echo Имя ПК: %IPname%
:: скопировать в буфер обмена текст из параметров / данная команда работает только в ОС начиная с Windows 7
echo %IPname%|clip
:: задержка перед закрытием окна 30 сек
ping -n 1 -w 30000 10.10.254.254 >nul
goto :exit2
:: выход, если не переданы параметры
:exit
pause
:: выход если всё хорошо
:exit2

Отправлено: 12:41, 22-02-2019 | #12


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1682

Профиль | Отправить PM | Цитировать


f0r_ce, Вместо Echo
Код: Выделить весь код
<nul (Set /P "IPName=%IPName%"|clip)
Цитата f0r_ce:
:: задержка перед закрытием окна 30 сек
ping -n 1 -w 30000 10.10.254.254 >nul »
Код: Выделить весь код
>nul Timeout /T 30
Слегка изменил стиль написания Вашего кода
Код: Выделить весь код
@Echo Off
	If "%~1"=="" (
		cls
		Echo ***********************************************************************
		Echo *
		Echo * Не введён параметр - IP ПК
		Echo *
		Echo ***********************************************************************
		Echo !!!  Ошибка: Задайте имя компьютера!
		Echo.
		Pause
		Exit /B 1
	)
	Set "IP=%~1"

Rem C помощью ping извлекаем имя ПК из IP
	chcp 437 >nul
	Set "Key1=Pinging"
	Set "IPname=Not Found"
	FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`2^>nul Ping  -a -n 1 -4 %IP%`) DO (
		If /I "%Key1%"=="%%i" If /I "[%IP%]"=="%%k" Set "IPname=%%j"
	)

Rem Ip Not Found
	If "%IPname%"=="Not Found" (
		Cls
		Echo !!! Echo Computer with IP=%IP% not found
		Echo.
		Pause
		Exit /B 2
	)

Rem Берём только часть имени ПК до точки
	FOR /F "delims=." %%i IN ("%IPName%") Do Set "IPName=%%i"
	Echo Имя ПК: %IPname%

Rem Cкопировать в буфер обмена текст из параметров / данная команда работает только в ОС начиная с Windows 7
	<nul (Set /P "IPName=%IPName%"|clip)

Rem задержка перед закрытием окна 30 сек
	>nul Time /T 30

Exit /B 0
Ежели всё-таки в имени компьютеров возможна кириллица, то на основе Ping без chcp 437
Код: Выделить весь код
@Echo Off
	If "%~1"=="" (
		cls
		Echo ***********************************************************************
		Echo * Не введён параметр - IP ПК
		Echo ***********************************************************************
		Echo !!!  Ошибка: Задайте имя компьютера!
		Echo.
		Pause
		Exit /B 1
	)
	Set "IP=%~1"

Rem C помощью ping извлекаем имя ПК из IP
	FOR /F "usebackq delims=" %%i IN (`2^>nul Ping  -a -n 1 -4 %IP%`) DO (
		Call :NameIP %IP% "IPName" %%i ||(

Rem Ip Not Found
			Cls
			Echo !!! Echo Computer with IP=%IP% not found
			Echo.
			Pause
			Exit /B 2
		)
		GoTo :Continue
	)
	:Continue
	FOR /F "delims=." %%i IN ("%IPName%") Do Set "IPName=%%i"

Rem Берём только часть имени ПК до точки
	FOR /F "delims=." %%i IN ("%IPName%") Do Set "IPName=%%i"
	Echo Имя ПК: %IPname%

Rem Cкопировать в буфер обмена текст из параметров / данная команда работает только в ОС начиная с Windows 7
	<nul (Set /P "IPName=%IPName%"|clip)

Rem задержка перед закрытием окна 30 сек
	>nul Time /T 30

Exit /B 0

:NameIP
	Set "%~2=Not Found"
	If "%4"=="" Exit /B 2
	If "%4"=="[%1]" (Set "%~2=%3" &Exit /B 0)
	Shift /3
	GoTo :NameIP  	
Exit /B 2

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-02-2019 в 16:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:02, 22-02-2019 | #13


Аватара для yurfed

Ветеран


Сообщения: 20032
Благодарности: 3120

Профиль | Отправить PM | Цитировать


Цитата mwz:
А если в имени компьютера есть русские буквы? »
Цитата:
chcp 1251
Ещё так chcp 866, если вдруг не заладилось.

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 15:32, 22-02-2019 | #14


Аватара для f0r_ce

Пользователь


Сообщения: 55
Благодарности: 2

Профиль | Отправить PM | Цитировать


megaloman, спасибо за правки.
Получившийся код
Код: Выделить весь код
:: Копировать в буфер обмена имя ПК с параметром в виде имени ПК при запуске данного файла
@Echo Off & rem отключение вывода не информативных строчек
	If "%~1"=="" (
		cls
		Echo ***********************************************************************
		Echo *
		Echo * Не введён параметр - IP ПК
		Echo *
		Echo ***********************************************************************
		Echo !!!  Ошибка: Задайте имя компьютера!
		Echo. & rem вывод пустой строки
		Pause
		Exit /B 1
	)
	Set "IP=%~1"

Rem C помощью ping извлекаем имя ПК из IP
	chcp 437 >nul
	Set "Key1=Pinging"
	Set "IPname=Not Found"
	FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`2^>nul Ping  -a -n 1 -4 %IP%`) DO (
		If /I "%Key1%"=="%%i" If /I "[%IP%]"=="%%k" Set "IPname=%%j"
	)

Rem Ip Not Found
	If "%IPname%"=="Not Found" (
		Cls
		Echo Computer with IP = %IP% not found
		Echo.
		Pause
		Exit /B 2
	)

Rem Берём только часть имени ПК до точки
	FOR /F "delims=." %%i IN ("%IPName%") Do Set "IPName=%%i"
	chcp 866 >nul
	Echo Имя ПК: %IPname%

Rem Cкопировать в буфер обмена текст из переменной / данная команда работает только в ОС начиная с Windows 7
	<nul (Set /P "IPName=%IPName%"|clip)

Rem задержка перед закрытием окна 10 сек
	>nul Timeout /T 10

Exit /B 0

Только не понятно, почему не получается написать по русски строчку "Echo Computer with IP = %IP% not found" даже если перед этим переключить кодировку на 1251 или 866?

Отправлено: 11:10, 26-02-2019 | #15


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1682

Профиль | Отправить PM | Цитировать


Цитата:
о не понятно, почему не получается написать по русски строчку "Echo Computer ......
потому, что батник надо сохранять в 866 кодировке и поместить chcp 866 >nul после скобки с циклом с ping.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:56, 26-02-2019 | #16


Аватара для f0r_ce

Пользователь


Сообщения: 55
Благодарности: 2

Профиль | Отправить PM | Цитировать


megaloman, спасибо. Задача выполнена
Теперь код идеален :-)
Код: Выделить весь код
REM Копировать в буфер обмена имя ПК с параметром в виде имени ПК при запуске данного файла
@Echo Off & rem отключение вывода не информативных строчек
	If "%~1"=="" (
		cls
		Echo ***********************************************************************
		Echo *
		Echo * Не введён параметр - IP ПК
		Echo *
		Echo ***********************************************************************
		Echo !!!  Ошибка: Задайте имя компьютера!
		Echo. & rem вывод пустой строки
		Pause
		Exit /B 1
	)
	Set "IP=%~1"

Rem C помощью ping извлекаем имя ПК из IP
	chcp 437 >nul
	Set "Key1=Pinging"
	Set "IPname=Not Found"
	FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`2^>nul Ping  -a -n 1 -4 %IP%`) DO (
		If /I "%Key1%"=="%%i" If /I "[%IP%]"=="%%k" Set "IPname=%%j"
	)
	
Rem Выход, если Ip не найден
	chcp 866 >nul
	If "%IPname%"=="Not Found" (
		Cls
		Echo Компьютер с IP = %IP% не найден 
		Echo.
		Pause
		Exit /B 2
	)

Rem Берём только часть имени ПК до точки
	FOR /F "delims=." %%i IN ("%IPName%") Do Set "IPName=%%i"
	Echo Имя ПК: %IPname%

Rem Cкопировать в буфер обмена текст из переменной / данная команда работает только в ОС начиная с Windows 7
	<nul (Set /P "IPName=%IPName%"|clip)

Rem задержка перед закрытием окна 10 сек
	>nul Timeout /T 10

Exit /B 0

Отправлено: 12:32, 26-02-2019 | #17



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Получить имя ПК по IP адресу в локальной сети.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Windows не может получить доступ к ПК по локальной сети oxival Microsoft Windows 10 17 22-05-2018 14:11
[решено] Как определить NetBIOS имя компьютера по IP адресу? SSS Microsoft Windows NT/2000/2003 15 17-05-2017 05:09
Прочее - [решено] При входе на комп по сети по IP-адресу требует ввода логина/пароля __sa__nya Сетевые технологии 12 15-03-2015 19:53
DNS/DHCP - [решено] Машина в локальной сети не может получить IP, присвоенный ей службой DHCP сервера Alex51278 Сетевые технологии 2 30-03-2011 14:08
Компьютер видиться в сети только по IP-адресу Solitude Сетевые технологии 15 26-05-2006 22:25




 
Переход