仅使用native windows命令从`ipconfig`获取IP地址

时间:2018-03-09 08:26:26

标签: linux windows

假设这是Windows ipconfig命令的输出。

c:\>ipconfig

Windows IP Configuration

Wireless LAN adapter Wireless Network Connection:

   Connection-specific DNS Suffix  . :
   IPv4 Address. . . . . . . . . . . : 192.168.1.10
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.1

c:\>

在Linux操作系统中,我可以使用grepcut命令轻松获取IP地址。

user@linux:~$ cat ip  
c:\>ipconfig

Windows IP Configuration

Wireless LAN adapter Wireless Network Connection:

   Connection-specific DNS Suffix  . :
   IPv4 Address. . . . . . . . . . . : 192.168.1.10
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.1

c:\>
user@linux:~$ 

user@linux:~$ cat ip | grep IPv                 
   IPv4 Address. . . . . . . . . . . : 192.168.1.10
user@linux:~$ 

user@linux:~$ cat ip | grep IPv | cut -d ':' -f 2
 192.168.1.10
user@linux:~$ 

但是,在Windows中,这是我使用findstr命令可以获得的最佳效果。 有没有办法让cut只输出这个输出的IP部分?

c:\>ipconfig | findstr IPv4
   IPv4 Address. . . . . . . . . . . : 192.168.1.10

c:\>

我期待的是仅使用本机Windows命令

c:\>ipconfig | <some command here just to get an IP Address only>
   192.168.1.10
c:\>

4 个答案:

答案 0 :(得分:1)

您可以使用以下说明来实现目标:

for /f "tokens=2 delims=:" %i  in ('ipconfig ^| findstr "IPv4" ^| findstr [0-9]') do echo %i

答案 1 :(得分:0)

如果我需要做这样的事情,我会使用GnuWin32 utilities

只需运行安装程序,即可开始使用。 (可能需要调整%PATH%。)

我很确定你可以使用findstrfor loop tokenization来破解基于批处理文件的解决方案,但我不会打扰。

GnuWin32 utils提供zip binary download,所以你甚至不需要管理员权限来使用它们(只是能够在机器上获得exe)。

答案 2 :(得分:0)

您可以将ipconfig | cscript /Nologo script.js与包含以下内容的文件script.js一起使用

var lines = WScript.Stdin.ReadAll().split('\n');

for(var i = 0; i < lines.length; ++i) {
        var line = lines[i];

        if(line.match(/IPv4 Address/)) {
                WScript.echo(line.replace(/ *IPv4 Address[ .]*: /, ''));
        }
}

请注意,可能有多个网络适配器,导致打印多个IP。

答案 3 :(得分:0)

我无法使ipconfig命令按照我想要的方式工作,即隔离我所需的特定网络适配器的IP。

我需要“以太网”,但是您可以选择任何一个,例如“ Wi-Fi”。

要实现此目的,我改用netsh(注意:OP专门询问了ipconfig,但是实现了相同的结果,所以我想我会分享):

Container buildTextField(bool isObscure, TextEditingController textEditingController, String hintText, bool onlyNumber) {
    return Container(
      width: double.infinity,
      height: 60,
      color: MyColors.primary,
      alignment: Alignment.center,
      child: Padding(
        padding: EdgeInsets.only(left: 15, right: 10),
        child: TextFormField(
          textAlign: TextAlign.center,
          keyboardType: onlyNumber ? TextInputType.number : TextInputType.text,
          decoration: InputDecoration(
            hintText: hintText,
            hintStyle: TextStyle(
              color: Colors.white,
              fontWeight: FontWeight.w600,
            ),
            border: InputBorder.none,
          ),
          style: TextStyle(
            color: Colors.white,
            decoration: TextDecoration.none,
            fontWeight: FontWeight.w600,
          ),
          obscureText: isObscure,
          controller: textEditingController,
        ),
      ),
    );
  }

有关其工作方式以及如何对其进行自定义的说明,请参见我的相关文章:https://stackoverflow.com/a/59004409/2684661