• ベストアンサー

IPアドレスのゼロパディング

Select * from Win32_NetworkAdapterConfigurationで IPアドレスを取得しています。 できれば、000.000.000.000というようにゼロパディングした状態で 取得していたいと思っていますが、Web上に参考になるサンプルを見つけることができません。 何方かご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 > イマイチ上手くできません。 何が上手くできないか、具体的に書いてほしいと思います。ロジックは 提示しましたよ。 ....というのは横においといて。ソースを整形しました。私の好みで^^; 投稿用にインデントで全角 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

DONALD-D
質問者

お礼

KenKen_SP様 整形して頂いた作成したソースを参考に、 思い通りのScriptが作成できました。ありがとう御座いました。 VBScriptはまだ初心者なので、これからもっと勉強します。 また機会がありましたらご教授よろしくお願いします。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

ああ、投稿後に気づきましたが、 ' // IP Address For Each ip In netAdapter.IPAddress()   csv.Write WQ & IPZeroPadding(ip) & WQ & "," Next csv.WriteBlankLines 1 ' <--- 追加 改行入れた方がいいかもしれませんね。 ネットワークカードの2枚刺し環境等考えられますから。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 環境が書かれておりませんので 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 こういうことですか?

DONALD-D
質問者

補足

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 ****以下を 上手く組み合わせればできそうですが、初心者なのでイマイチ上手く できません。 どうかよろしくお願いします。

関連するQ&A

専門家に質問してみよう