如何从 ipconfig 的输出中提取 IPv4 IP 地址

如何从 ipconfig 的输出中提取 IPv4 IP 地址

我试图让 cmd 仅从命令输出中复制一组特定字符。我能够选择该短语所在的行,但从那里我迷失了方向。这是我到目前为止的命令。

ipconfig | findstr /i "ipv4"

我相信你对这个ipconfig命令和这个findstr命令很熟悉。基本上我是在隔离特定计算机的 IPv4 地址。这就是上面的命令。

IPv4 Address. . . . . . . . . . . : 192.168.1.75

我想隔离“192.168.1。”并将其保存到变量中,以便稍后在命令中使用。假设我将“192.168.1。”设置为变量a

我要运行的下一个命令将扫描从 192.168.1.1 到 192.168.1.254 的所有 IP 地址,并保存正在使用的任何 IP 地址。由于这个即将成为程序的地址将在不同位置的不同计算机上运行,​​“192.168.1.”将有所不同,我希望隔离 cmd 在其位置输入的任何内容。因此上述变量A可以是但不限于 192.168.10.、10.10.10.,甚至 1.1.1.,具体取决于情况。这是我将使用的代码。

FOR /L %i IN (1,1,254) DO ping -n 1 (the 'a' variable)%i | FIND /i "bytes=">>c:\ipaddresses.txt

或者查看变量的样子是否有帮助。

FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i | FIND /i "bytes=">>c:\ipaddresses.txt

我正在使用 64 位 Windows 10 Pro 机器。

答案1

我想隔离“192.168.1。”并将其保存到变量中

使用以下批处理文件(test.cmd):

@echo off
setlocal
setlocal enabledelayedexpansion
rem throw away everything except the IPv4 address line 
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr /i "ipv4"`) do (
  rem we have for example "IPv4 Address. . . . . . . . . . . : 192.168.42.78"
  rem split on : and get 2nd token
  for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
    rem we have " 192.168.42.78"
    rem split on . and get 4 tokens (octets)
    for /f "tokens=1-4 delims=." %%c in ("%%b") do (
      set _o1=%%c
      set _o2=%%d
      set _o3=%%e
      set _o4=%%f
      rem strip leading space from first octet
      set _3octet=!_o1:~1!.!_o2!.!_o3!.
      echo !_3octet!
      )
    )
  )
rem add additional commands here
endlocal

笔记:

  • 您想要的值保存在_3octet
  • 删除echo用于调试的
  • 替换rem add additional commands here为你的“网络 ping”

使用示例和输出:

F:\test>ipconfig | findstr /i "ipv4"
   IPv4 Address. . . . . . . . . . . : 192.168.42.78

F:\test>test
192.168.42.

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • ipconfig- 配置IP(Internet协议配置)
  • - 显示、设置或删除 CMD 环境变量。使用 SET 所做的更改将仅在当前 CMD 会话期间保留。
  • 设置本地- 设置选项来控制批处理文件中环境变量的可见性。
  • 变量- 提取变量的一部分(子字符串)。

答案2

这对我适用于多台计算机:

for /F "tokens=14" %A in ('"ipconfig | findstr IPv4"') do echo %A

答案3

尝试这样的事情。“ipconfig /all > network_info.txt”只是为程序创建一个 txt 文件

ipconfig /all > network_info.txt
type network_info.txt | findstr /v Stuff | findstr /v Etc > whatyouwant.txt
set /p Build=<whatyouwant.txt

这个选项很耗时,但非常简单。你必须继续做

| findstr /v something

并将单词替换为您想要的单词。您必须决定如何从不同的行中删除某些单词,但如果您想要简单的话,这种方法是可行的。我在命令的输出中使用它来删除我不想要的垃圾。理想情况下,您会在 txt 中获得输出,它会读取第一行,因此您只有一行 txt。希望我帮助了或帮助了其他需要这个答案的人。这很复杂,但如果这是一个加分项,您也可以在 txt 中获得答案

答案4

将 IP 地址分配给连续编号的环境变量 (IP1、IP2)。适用于具有多个网络适配器的系统。

@echo off
setlocal enabledelayedexpansion
set _count=1
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr /i "ipv4"`) do (
    for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
        for /f "tokens=*" %%c IN ('echo %%b') do (set IP!_count!=%%c & echo IP!_count!=%%c & set /a _count+= 1)
  )
)
set _count=
call :haltAndStore 2> nul

REM kludge: Forces batch processor to abort causing side-effect of persisting env vars.
:haltAndStore
()

相关内容