- ベストアンサー
IPアドレスのゼロパディング
Select * from Win32_NetworkAdapterConfigurationで IPアドレスを取得しています。 できれば、000.000.000.000というようにゼロパディングした状態で 取得していたいと思っていますが、Web上に参考になるサンプルを見つけることができません。 何方かご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > イマイチ上手くできません。 何が上手くできないか、具体的に書いてほしいと思います。ロジックは 提示しましたよ。 ....というのは横においといて。ソースを整形しました。私の好みで^^; 投稿用にインデントで全角 SP を使用してます。 VBS ファイルの場合は、 エディタで全角 SP 1個を半角 SP 2個または Tab に置換して下さい。 余談ですが、FSO の CreateTextFile で開いたファイルを閉じる処理の 追加、および CSV の保存先パス等はきちんと書いた方が良いですよ。 CSV の Close 処理は追加しておきましたが。。 Option Explicit Call OutputIPAddress Sub OutputIPAddress() Const WQ = """" Dim sComputer, sHostname, sql Dim wmi, net, fso, csv, netAdapters, netAdapter, ip sComputer = "." Set wmi = GetObject("winmgmts:!\\" & sComputer & "\root\cimv2") Set net = CreateObject("WScript.Network") sHostname = UCase(net.ComputerName) Set fso = CreateObject("Scripting.FileSystemObject") Set csv = fso.CreateTextFile(sHostname & ".csv") sql = "" sql = sql & "Select * " sql = sql & " From Win32_NetworkAdapterConfiguration" sql = sql & " Where IPEnabled = True" Set netAdapters = wmi.ExecQuery(sql) For Each netAdapter In netAdapters ' // Host Name csv.Write WQ & UCase(netAdapter.DNSHostName) & WQ & "," ' // Physical address csv.Write WQ & UCase(netAdapter.MACAddress) & WQ & "," ' // IP Address For Each ip In netAdapter.IPAddress csv.Write WQ & IPZeroPadding(ip) & WQ & "," Next Next csv.Close Set netAdapters = Nothing Set csv = Nothing: Set fso = Nothing Set net = Nothing: Set wmi = Nothing End Sub Function IPZeroPadding(ByVal sIPAddress) Dim v, i v = Split(Trim(sIPAddress), ".") For i = 0 To 3 v(i) = Right("000" & v(i), 3) Next sIPAddress = Join(v, ".") IPZeroPadding = sIPAddress End Function
その他の回答 (2)
- KenKen_SP
- ベストアンサー率62% (785/1258)
ああ、投稿後に気づきましたが、 ' // IP Address For Each ip In netAdapter.IPAddress() csv.Write WQ & IPZeroPadding(ip) & WQ & "," Next csv.WriteBlankLines 1 ' <--- 追加 改行入れた方がいいかもしれませんね。 ネットワークカードの2枚刺し環境等考えられますから。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 環境が書かれておりませんので VB/VB(A) で回答します。 ほとんど Microsoft スクリプトセンターの流用です。。。 strComputer = "." Set objWMIService = GetObject _ ("winmgmts:" & "!\\" & strComputer & "\root\cimv2") Set colAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True") For Each objAdapter In colAdapters For Each ip In objAdapter.IPAddress ' // *** zero padding **** v = Split(ip, ".") For i = 0 To 3 v(i) = Right$("000" & v(i), 3) Next i Debug.Print Join$(v, ".") Next Next こういうことですか?
補足
KenKen_SPさん、回答ありがとうございます。 環境はWindowsXPでvbsファイルを実行してホスト名やIPを取得する Scriptを作成しています。 このような感じでIPを取得していますが上手く ゼロパディングできればと。。。 strComputer = "." Set objWMIService = GetObject ("winmgmts:" & "!\\" & strComputer & "\root\cimv2") Set WshNetwork = CreateObject("WScript.Network") strCompName = WshNetwork.ComputerName Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.CreateTextFile(strCompName & ".csv") Set colItems = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True") For Each objAdapter in colItems objFile.Write """" & UCase(objAdapter.DNSHostName) & """" & ","'ホスト名 If Not IsNull(objAdapter.IPAddress) Then For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress) objFile.Write """" & objAdapter.IPAddress(i) & """" & ","'IPアドレス Next End If Next KenKen_SPさんに提示していただいたソースの ' // *** zero padding ****以下を 上手く組み合わせればできそうですが、初心者なのでイマイチ上手く できません。 どうかよろしくお願いします。
お礼
KenKen_SP様 整形して頂いた作成したソースを参考に、 思い通りのScriptが作成できました。ありがとう御座いました。 VBScriptはまだ初心者なので、これからもっと勉強します。 また機会がありましたらご教授よろしくお願いします。