1

私は VBScript を初めて使用し、次のコードが機能する理由について困惑しています。

set Adapters = GetObject("winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")

for each Nic in Adapters
    if Nic.IPEnabled then
        MsgBox "IP Address: " & Nic.IPAddress(asdf), 4160, "IP Address"
    end if
next

変数asdfが未定義の場合、機能します。無効なインデックス (-1 や 4 など)を定義するasdfと、無効なインデックス エラーが発生します。

私は考えました: おそらく、未定義の変数は VBS でデフォルトで 0 になるのでしょうか? いいえ、印刷しようとしましたが、何も書かれていません。

文書化された配列の最初の項目を返す配列インデックスとして未定義の変数を渡す機能はどこにありますか? VBScript でプログラミングしているときに遭遇する可能性のある、他に似た奇妙な点にはどのようなものがありますか?

編集:私が発見したいくつかのこと:

  • EmptyVBScript では、未定義の変数はデフォルトで等しい
  • Empty = 0本当です
  • Nic.IPAddress(Empty)配列の最初の要素も返します
  • MsgBox 0印刷されます0が、MsgBox Empty何も印刷されません

Empty配列のインデックス付けが最初の要素を返すことによって静かに処理されること、それが 0 と同等であるが 0 とは異なる方法で印刷される理由、および他の構成要素がEmptyパラメーターを処理すること (およびそれらが結果として何をするか) を説明していることを示すドキュメントを見つけるのにまだ苦労しています。

4

2 に答える 2

2

未定義の変数はEmptyありEmpty、配列のインデックスを返すとインデックスも返され0ます。

配列には、 aと aIPAddressの 2 つのインデックスがあります。 01

したがって、これはあなたのコードと同じ効果があります:
MsgBox "IP Address: " & Nic.IPAddress(0), 4160, "IP Address"
そして
MsgBox "IP Address: " & Nic.IPAddress(Empty), 4160, "IP Address"

これにより、IPv6 アドレスが得られます。
MsgBox "IP Address: " & Nic.IPAddress(1), 4160, "IP Address"

また、これは配列の両方のインデックスを返します。
WScript.Echo Join(Nic.IPAddress,",")

また、この例を考えてみましょう。
arr = Array("first","second","third")
WScript.Echo arr(Empty)

ここでの出力は次のようになりますfirst

VBScript のデータ型については、次の投稿を参照して
ください
。ライブラリ/9e7a57cf(v=vs.84).aspx

于 2013-11-08T16:21:49.047 に答える