C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

batでのネットワーク接続名取得について

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■95008 / inTopicNo.1)  batでのネットワーク接続名取得について
  
□投稿者/ tetris (1回)-(2020/06/11(Thu) 12:00:38)

分類:[Windows 全般] 

windows10での動作、batファイルに関しての質問です。
希望としましては以下のようなbatファイルを作成したいと考えています。
・実行すると使用中のネットワークアダプタ名を取得して、変数に格納する。
・有線接続であっても、無線接続であっても結果を取得したい。

以下は、現段階でのプログラムです。これですと、無線対応はしておらず、ipconfigで得られる一番下の結果を取得しているだけになってしまいます。

rem @echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,*" %%a in ('ipconfig /all ^| find "イーサネット アダプター"') do (
set Network_Name=%%c
)
set Local_Network=!Network_Name:~0,-1!

echo ネットワーク接続名は:%Local_Network%です
pause

デスクトップPCでの実行結果⇒ イーサネットアダプター  
となってます。
ノートパソコンでのWifiを使っている実行結果⇒Bruetoothアダプター (使用してすらいません)

わかりづらい質問で申し訳ございませんが、ご教授頂ければと思います。宜しくお願い致します。

引用返信 編集キー/
■95009 / inTopicNo.2)  Re[1]: batでのネットワーク接続名取得について
□投稿者/ 魔界の仮面弁士 (2746回)-(2020/06/11(Thu) 12:20:40)
No95008 (tetris さん) に返信
> ・実行すると使用中のネットワークアダプタ名を取得して、変数に格納する。
> ・有線接続であっても、無線接続であっても結果を取得したい。

複数のネットワークアダプター(仮想的な物も含む)が同時に有効になることが
ありえるわけですが、その場合はどうするのでしょうか。

それぞれに優先順位を付けておき、優先順位の高いものを格納したいとか、
あるいはすべてを列挙するために文字列連結して格納しておきたいとか。


> ipconfigで得られる一番下の結果を取得しているだけになってしまいます。
> ノートパソコンでのWifiを使っている実行結果⇒Bruetoothアダプター (使用してすらいません)
× Bruetooth
○ Bluetooth

使用していなくても無効化されていないのなら列挙はされるでしょうから、
IF 等で「Bluetooth だったら SET しない」条件を加えるとか。
引用返信 編集キー/
■95010 / inTopicNo.3)  Re[2]: batでのネットワーク接続名取得について
□投稿者/ tetris (2回)-(2020/06/11(Thu) 13:10:59)
2020/06/11(Thu) 13:11:25 編集(投稿者)

No95009 (魔界の仮面弁士 さん) に返信

> 複数のネットワークアダプター(仮想的な物も含む)が同時に有効になることが
> ありえるわけですが、その場合はどうするのでしょうか。
ipconfig /all で表示される項目の中で 192.168.1.100(優先)
この優先が含まれるネットワークアダプターを取得できたらと思っております。
この条件を書くのを忘れていました。この優先がつくのは1つの接続名しかないはずなので・・・。

> × Bruetooth
> ○ Bluetooth
誤字のご指摘ありがとうございます。


引用返信 編集キー/
■95011 / inTopicNo.4)  Re[3]: batでのネットワーク接続名取得について
□投稿者/ 魔界の仮面弁士 (2747回)-(2020/06/11(Thu) 16:27:05)
No95010 (tetris さん) に返信
> ipconfig /all で表示される項目の中で 192.168.1.100(優先)
> この優先が含まれるネットワークアダプターを取得できたらと思っております。

その検索条件には、IP アドレスの部分も含まれていますか?

"(優先)" という文字列だけだと、下記のように
複数のアダプターが列挙される可能性がありそうです。


イーサネット アダプター ローカル エリア接続:
   IPv4 アドレス . . . . . . . . . . . .: 10.12.34.56(優先)

イーサネット アダプター vEthernet (Default Switch):
   IPv4 アドレス . . . . . . . . . . . .: 172.16.78.90(優先)
   リンクローカル IPv6 アドレス. . . . .: 2001:db8::2%22(優先)



> for /f "tokens=1,2,*" %%a in ('ipconfig /all ^| find "イーサネット アダプター"') do (

wmic から得られないかな…と思ったのですが、IPAddress が配列を返すのが難点。
(WQL は配列型に対するクエリをサポートしてない)

wmic NIC where NetEnabled=TRUE get DeviceID, InterfaceIndex, NetConnectionID
wmic NICConfig where IPEnabled=TRUE get InterfaceIndex, IPAddress

配列を処理するために、PowerShell か VBScript を併用するか、
標準出力を文字列として切り出して判断するか…。



> ipconfig /all で表示される項目の中で 192.168.1.100(優先)

IP アドレス固定の問い合わせパターン。

=========

REM @ECHO OFF
SET IP=192.168.1.100
SET PSCMD="Get-CimInstance Win32_NetworkAdapter -Filter NetEnabled=TRUE | select -Property NetConnectionID, @{name='IP'; expression={(Get-CimAssociatedInstance -Association Win32_NetworkAdapterSetting $_).IPAddress}} |?{[Array]::IndexOf($_.IP,'%IP%') -ne -1}|%%{$_.NetConnectionID}"
FOR /F "USEBACKQ DELIMS=" %%A IN (`PowerShell.exe -Command %PSCMD%`) DO SET ADAPTER=%%A
ECHO [%ADAPTER%]

引用返信 編集キー/
■95012 / inTopicNo.5)  Re[4]: batでのネットワーク接続名取得について
□投稿者/ tetris (3回)-(2020/06/11(Thu) 16:38:39)
No95011 (魔界の仮面弁士 さん) に返信

> その検索条件には、IP アドレスの部分も含まれていますか?
>
> "(優先)" という文字列だけだと、下記のように
> 複数のアダプターが列挙される可能性がありそうです。
>
>
> イーサネット アダプター ローカル エリア接続:
> IPv4 アドレス . . . . . . . . . . . .: 10.12.34.56(優先)
>
> イーサネット アダプター vEthernet (Default Switch):
> IPv4 アドレス . . . . . . . . . . . .: 172.16.78.90(優先)
> リンクローカル IPv6 アドレス. . . . .: 2001:db8::2%22(優先)
>
>
>
>>for /f "tokens=1,2,*" %%a in ('ipconfig /all ^| find "イーサネット アダプター"') do (
>
> wmic から得られないかな…と思ったのですが、IPAddress が配列を返すのが難点。
> (WQL は配列型に対するクエリをサポートしてない)
>
> wmic NIC where NetEnabled=TRUE get DeviceID, InterfaceIndex, NetConnectionID
> wmic NICConfig where IPEnabled=TRUE get InterfaceIndex, IPAddress
>
> 配列を処理するために、PowerShell か VBScript を併用するか、
> 標準出力を文字列として切り出して判断するか…。
>
>
>
>>ipconfig /all で表示される項目の中で 192.168.1.100(優先)
>
> IP アドレス固定の問い合わせパターン。
>
> =========
>
> REM @ECHO OFF
> SET IP=192.168.1.100
> SET PSCMD="Get-CimInstance Win32_NetworkAdapter -Filter NetEnabled=TRUE | select -Property NetConnectionID, @{name='IP'; expression={(Get-CimAssociatedInstance -Association Win32_NetworkAdapterSetting $_).IPAddress}} |?{[Array]::IndexOf($_.IP,'%IP%') -ne -1}|%%{$_.NetConnectionID}"
> FOR /F "USEBACKQ DELIMS=" %%A IN (`PowerShell.exe -Command %PSCMD%`) DO SET ADAPTER=%%A
> ECHO [%ADAPTER%]


引用めちゃめちゃで申し訳ないです。ちょっといただいた意見を参考に考え直してみます。
魔界の仮面弁士さん、本当にいろいろ詳しいのですね。いつも助かっております。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ