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 주소를 검색하고 사용 중인 주소를 저장합니다. 이 프로그램은 곧 "192.168.1"이라는 다양한 위치의 다른 컴퓨터에서 실행될 예정입니다. 다를 것이며 cmd가 해당 위치에 넣는 모든 것을 격리하려고 합니다. 그래서 앞서 언급한 변수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"네트워크 핑"으로 교체하십시오 .

사용법 및 출력 예:

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

F:\test>test
192.168.42.

추가 자료

  • Windows CMD 명령줄의 AZ 인덱스- Windows cmd 라인과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
  • 활성화 지연확장- 지연된 확장으로 인해 구문 분석 시간이 아닌 실행 시간에 변수가 확장됩니다.
  • /f에 대해- 다른 명령의 결과에 대해 명령을 반복합니다.
  • IP구성- IP 구성(인터넷 프로토콜 구성)
  • 세트- 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

연속적으로 번호가 매겨진 환경 변수(IP1, IP2)에 IP 주소를 할당합니다. 여러 네트워크 어댑터가 있는 시스템의 경우.

@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
()

관련 정보