0

vbscript に「問題」があります。次のコードで CD がロードされているかどうかを確認します。

On Error Resume Next
Computer = "."
Set OutFile = CreateObject("WScript.Shell")
Const ForAppending = 2
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set WMIService = GetObject("winmgmts:\\" & Computer & "\root\cimv2")
Set Items = WMIService.ExecQuery("Select * from Win32_CDROMDrive WHERE DRIVE = 'F:'",,48)
For Each SubItems in Items
WScript.Echo "DRIVE: "&SubItems.MediaLoaded
Next

「DRIVE: False」を返す

しかし、出力を出力する行を変更すると、次のようになります。

WScript.Echo SubItems.MediaLoaded

-1 を返します

「DRIVE:-1」を取得する方法を知っている人はいますか?

madzone のおかげで WScript.Echo "DRIVE: "&cint(SubItems.MediaLoaded) で解決しました

4

3 に答える 3

1

私は英語が苦手ですが、エッケハルト・ホーナーの説明は私のよりも優れていると思います。私が知っているのは、文字列の連結Booleanによってデータ型がリテラル形式になるということです。

WScript.Echo "" & False, 0, False  '>> False 0 0
WScript.Echo "" & True, -1, True   '>> True -1 -1
WScript.Echo 0 = False, 0 = True   '>> -1 0
WScript.Echo -1 = False, -1 = True '>> 0 -1
于 2013-05-24T21:00:11.680 に答える
0

docsによると、.MediaLoaded の型は boolean です

MediaLoaded

Data type: boolean
Access type: Read-only

If True, a CD-ROM is in the drive.

連結演算子 & は、VBScript の (サブ) タイプを正しく処理します。

>> bTrue = True
>> bFalse = False
>> n0 = 0
>> nM1 = -1
>> WScript.Echo "&" & bTrue & bFalse & n0 & nM1
>>
&TrueFalse0-1

WScript.Echo の内部文字列化コンポーネントは、次のことを行いません。

>> WScript.Echo ".Echo ,", bTrue, bFalse, n0, nM1
>>
.Echo , -1 0 0 -1

おそらく & 演算子は内部的に CStr() を呼び出します:

>> WScript.Echo "CStr() ,", CStr(bTrue), CStr(bFalse), CStr(n0), CStr(nM1)
>>
CStr() , True False 0 -1

Join 関数も勤勉です。

>> WScript.Echo "Join", Join(Array(bTrue, bFalse, n0, nM1))
>>
Join True False 0 -1

もちろん、出力を次のようにする権利があります

DRIVE: 0
DRIVE: -1

それ以外の:

MediaLoaded: False
MediaLoaded: True

しかし、勤勉で何かを変えたと非難するのは公平ではありません。

于 2013-05-24T18:09:07.127 に答える
0

CInt 関数を使用して、文字列を整数に変換します。

WScript.Echo "Drive: " & CInt(SubItems.MediaLoaded)
于 2013-05-24T16:46:12.080 に答える