Windows: получение и сохранение имени машины в переменной - PullRequest
2 голосов
/ 06 января 2011

У меня есть сценарий, который запускается по сети, при этом VPN совпадает со средой локальной сети.

Сценарий ранее работал нормально, поскольку у нас были переменные, в которых были сохранены имя пользователя и пароль для администратора.Однако из-за недавнего изменения, когда мы сопоставляем диск по сети и все такое, имя машины теперь необходимо перед именем пользователя администратора, например, machinename2343\administrator.

То, что я хотел бы сделать, - это взять существующую команду - возможно, такую ​​как nbtstat - и после ввода IP-адреса программа должна вывести имя компьютера и вставить его в переменную.

Я обнаружил, что Nbtstat может дать мне имя машины, но предоставляет большое количество ненужной информации для моей задачи.Есть ли способ отфильтровать только имя машины надежным и последовательным образом, или, возможно, есть другая команда, связанная с сетью, которая выполняет те же функции?

`@echo off

FOR /f "tokens=1* delims= skip=23 " %%a IN ('nbtstat -a IPADDRESS) DO (
SET VARIABLE=%%a
GOTO Done
)
:Done
echo Computer name: %VARIABLE%`

Ответы [ 2 ]

1 голос
/ 06 января 2011

Вы могли бы сделать ping /a.Имя компьютера разрешено.И это имя компьютера является вторым токеном.Я не позаботился о проверке ошибок.Я верю, что вы могли бы реализовать это самостоятельно.Попробуйте это:

@ECHO OFF
FOR /f "tokens=2* delims= " %%a IN ('PING -a -n 1 IPADDRESS') DO (
    SET Variable=%%a
    GOTO Done
)
:Done
echo Computer name: %Variable%

Поместите это в свой пакетный файл, где он будет соответствовать.

1 голос
/ 06 января 2011

Вы можете просто использовать переменную окружения %computername%.

Когда я впервые прочитал ваш пост, я подумал, что вы запускаете командный файл удаленно на каждой машине. Если бы это было так, то %computername% в командном файле работало бы, потому что при удаленном выполнении командного файла %computername% расширялось бы на основе переменной среды удаленного компьютера, а не локального компьютера.

Оглядываясь назад, это все еще не очень понятно, но на основании вашего комментария я предполагаю, что пакетный файл выполняется локально, а затем подключается к набору машин для выполнения некоторых операций.

Вы можете использовать инструмент командной строки WMI, чтобы получить имя компьютера. Решение выглядело бы так же, как у @ Thrustmaster, но я думаю, что оно немного чище, поскольку в этом случае вывод wmic «отфильтровывает только имя машины надежным и согласованным образом». Конечно, вы замените 127.0.0.1 на ip, который вы хотите запросить.

@ECHO OFF
FOR /F "tokens=*" %%A IN ('wmic /node:127.0.0.1 ComputerSystem Get Name /Value ^| FIND "="') DO (
    SET COMP.%%A
)
ECHO %COMP.NAME%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...