我有一个通过网络运行的脚本,VPN与LAN环境相同。
以前的脚本运行正常,因为我们有变量存储管理员的用户名和密码。但是,由于最近的更改,当我们通过网络映射驱动器等等时,现在需要在管理员用户名前面的机器名称,例如。 machinename2343\administrator
。
我想要做的是使用现有命令 - 可能是nbtstat - 并在输入ip地址后,让程序拉出机器名并将其插入变量中。
我发现Nbtstat可以给我机器名称,但为我的任务提供了大量不必要的信息。有没有办法以可靠和一致的方式过滤出机器名称,或者是否有另一个网络相关命令以相同的容量执行?
`@echo offFOR /f "tokens=1* delims= skip=23 " %%a IN ('nbtstat -a IPADDRESS) DO ( SET VARIABLE=%%a GOTO Done ) :Done echo Computer name: %VARIABLE%`
答案 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%
将它放在适合的批处理文件中。