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.」は異なります。そのため、コマンドがその場所に配置するものを分離したいと考えています。そのため、前述の変数1つの状況に応じて、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 コマンド ラインに関連するあらゆることに関する優れたリファレンス。
  • 有効遅延拡張- 遅延展開では、変数は解析時ではなく実行時に展開されます。
  • /fの場合- 別のコマンドの結果に対してコマンドをループします。
  • ipconfig- 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 の行は 1 つだけです。私が役に立ったか、この回答を必要としている他の人の役に立ったことを願っています。複雑ですが、プラスであれば、回答も 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
()

関連情報