首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上,如何使用批处理脚本获取网络接口名( eth0/eth1/eth2 )?

在Windows上,如何使用批处理脚本获取网络接口名( eth0/eth1/eth2 )?
EN

Stack Overflow用户
提问于 2016-11-28 08:58:52
回答 2查看 5.5K关注 0票数 3

我正在windows上工作,想得到网络接口的名称,不管是它的eth0、eth1、eth2等等。我编写了java程序,通过传递主机/计算机的名称,可以找到ip地址,然后根据ip地址查找网络接口名。守则如下:

代码语言:javascript
运行
复制
public static String getNetworkInterface() {
        try {
            String computerHostName = "dummy";
            if(!computerHostName.equals("Unknown Computer")) {
                InetAddress address = InetAddress.getByName(computerHostName); 
                return NetworkInterface.getByInetAddress(address).getName();
            }
            else {
                return null;
            }
        }
        catch (SocketException e) {
            e.printStackTrace();
        } 
        catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

上面的方法返回类似eth0/eth1/eth2之类的值。

我也想在windows上使用批处理脚本实现相同的目标。我编写了以下脚本,它提供主机名和ip地址。但我不知道如何获得网络接口名。

代码语言:javascript
运行
复制
for /f "skip=1 delims=" %%A in (
  'wmic computersystem get name'
) do for /f "delims=" %%B in ("%%A") do set "compName=%%A"

echo hostname is %compName%

这个脚本给出主机名/计算机名。

请帮助我获得网络接口名称。

非常感谢。你好啊,叶什维德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-28 10:35:21

这将为您提供网络接口名称:

代码语言:javascript
运行
复制
@Echo Off
For /F "Skip=1Delims=" %%a In (
    '"WMIC NIC Where (Not NetConnectionStatus Is Null) Get NetConnectionID"'
) Do For /F "Tokens=*" %%b In ("%%a") Do Echo=%%b
Timeout -1
票数 3
EN

Stack Overflow用户

发布于 2016-11-28 12:12:52

如果要根据IP地址查找网络接口,可以使用:

代码语言:javascript
运行
复制
@echo off
SetLocal EnableDelayedExpansion

set ownIP=W.X.Y.Z
set netifc=
FOR /F "tokens=4*" %%G IN ('netsh interface ipv4 show interfaces ^| findstr /I "[^a-zA-Z]connected"') DO (
    REM set /P =interface %%G is connected < nul >> !progress!
    netsh interface ipv4 show addresses "%%H" | findstr /c "%ownIP%" > nul 2>&1
    IF !ERRORLEVEL! EQU 0 (
        set netifc=%%H
    )
)

:outLoop
echo IP-address %ownIP% from interface %netifc%
EndLocal
exit /b 0

我使用netsh而不是WMIC,因为我在WMIC方面没有多少经验,但在您的情况下,netsh就足够了。

注意,SetLocal EnableDelayedExpansion非常重要,因为这个脚本是基于检查ERRORLEVEL的。cmd-解析器将用()分隔的每一个命令块解析为一个命令,就好像它写在一行(在我们的例子中是FOR ... ( ... ) )一样。因此,除非使用延迟展开,否则不可能在()中使用其更新值的更改变量。如果没有,则只能使用输入块之前的值。由于ERRORLEVEL可以在每次迭代中更改(如果上面的findstr在接口地址中找到了IP地址,则为0),所以我们总是需要更新的值。这也是为什么我使用!ERRORLEVEL!而不是传统的%ERRORLEVEL%

有关EnableDelayedExtension的更多信息可以找到这里

使用set ownIP=127.0.0.1运行上面的脚本(不要忘记更改到您的IP)将得到以下结果:

代码语言:javascript
运行
复制
>search_interface.bat
IP-address 127.0.0.1 from interface Loopback Pseudo-Interface 1

如果您希望每次调用脚本时都将IP地址作为参数传递,请使用set ownIP=%~1 (但是,如果在这种情况下传递了参数,请不要忘记添加检查)。

希望能帮上忙。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40840400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档