Windows:在变量中获取并存储计算机名称

时间:2011-01-06 04:26:13

标签: windows variables batch-file

我有一个通过网络运行的脚本,VPN与LAN环境相同。

以前的脚本运行正常,因为我们有变量存储管理员的用户名和密码。但是,由于最近的更改,当我们通过网络映射驱动器等等时,现在需要在管理员用户名前面的机器名称,例如。 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 个答案:

答案 0 :(得分:1)

您可以使用%computername%环境变量。

当我第一次阅读您的帖子时,我以为您在每台计算机上远程运行批处理文件。如果批处理文件中有%computername%的情况可行,那么当远程执行批处理文件时,%computername%将根据远程计算机的环境变量而不是本地计算机进行扩展。

回顾它,它仍然不是很清楚,但根据你的评论,我假设批处理文件在本地运行,然后连接到一组机器来执行某些操作。

您可以使用工具WMI命令行工具来获取计算机名称。该解决方案看起来与@ Thrustmaster相似,但我认为它有点清洁,因为wmic的输出在这种情况下确实“以可靠一致的方式过滤掉机器名称”。当然你要用要查询的ip替换127.0.0.1。

@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%

答案 1 :(得分:1)

你可以做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%

将它放在适合的批处理文件中。