web-dev-qa-db-ja.com

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がその場所に配置するものを分離しようとしています。したがって、前述の変数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マシンを使用しています。

5
Samuel Pauk

「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コマンドラインのA-Zインデックス -Windows cmdラインに関連するすべてのものの優れたリファレンス。
  • enabledelayedexpansion -遅延展開では、変数は解析時ではなく実行時に展開されます。
  • for/f -別のコマンドの結果に対してコマンドをループします。
  • ipconfig -IPの構成(インターネットプロトコル構成)
  • set -CMD環境変数を表示、設定、または削除します。 SETで行った変更は、現在のCMDセッションの期間中のみ保持されます。
  • setlocal -バッチファイル内の環境変数の可視性を制御するオプションを設定します。
  • variables -変数(部分文字列)の一部を抽出します。
4
DavidPostill

このようなものを試してください。 「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

そしてWordをあなたが望むもので置き換えます。別の行から特定の単語を削除する方法を決定する必要がありますが、単純にしたい場合はこれでうまくいきます。コマンドの出力でこれを使用して、不要なゴミを削除します。あなたは理想的には出力をtxtに入れて、それが最初の行を読むので、txtの1行だけになるでしょう。私がこの答えを必要とした他の人を助けてくれたことを願っています。複雑ですが、それがプラスの場合は、txtでも回答を得ることができます

0
SoapBox