|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Получить имя ПК по IP адресу в локальной сети. |
|
Любой язык - [решено] Получить имя ПК по IP адресу в локальной сети.
|
Пользователь Сообщения: 55 |
Профиль | Отправить PM | Цитировать Здравствуйте. Помогите, пожалуйста, найти способ получения имени компьютера в сети по известному IP адресу.
В итоге требуется скопировать имя ПК в буфер обмена. Но для начала, мне бы найти способ извлечь имя ПК по IP адресу. При выполнении команды ping -a <ip адрес> получается слишком много данных. Не могу придумать как из них выделить только имя ПК и передать в переменную. |
|
Отправлено: 12:48, 19-02-2019 |
Пользователь Сообщения: 55
|
Профиль | Отправить PM | Цитировать megaloman, спасибо за код. Только хотелось бы, чтобы после имени ПК не вставлялся символ перевода строки и возврата каретки.
|
Отправлено: 11:59, 22-02-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 55
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать f0r_ce, Вместо Echo
Цитата f0r_ce:
Слегка изменил стиль написания Вашего кода
@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 |
Ветеран Сообщения: 20032
|
Профиль | Отправить PM | Цитировать Цитата mwz:
Цитата:
|
||
------- Отправлено: 15:32, 22-02-2019 | #14 |
Пользователь Сообщения: 55
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать Цитата:
|
|
------- Отправлено: 11:56, 26-02-2019 | #16 |
Пользователь Сообщения: 55
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - 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 |
|