我无法让 StrComp 正常工作,我也不知道为什么。有人能看出我可能做错了什么吗?(所有 IP 号码都已更改)
Option Explicit
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
Dim externalip
http.Open "GET", "http://icanhazip.com", False
http.Send
externalip = http.responseText
wscript.Echo externalip
wscript.Echo StrComp(externalip, "71.215.176.202")
if StrComp(externalip, "71.215.176.202") = 0 Then
wscript.Echo "Connected to Comcast"
else
wscript.echo "Connected to Office"
end if
Set http = Nothing
即使 externalip 正确,这也永远不会返回 0。奇怪的是 externalip 中似乎有一个额外的 CR/LF。我尝试使用 Trim 函数,但似乎没有帮助。以下是连接到办公室时的输出示例:
C:\BATFiles>cscript ip.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
107.62.166.159
-1
Connected to Office
以下是连接到我的本地 ISP(Comcast)时的输出
C:\BATFiles>cscript ip.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
71.215.176.202
1
Connected to Office
我从输出中知道我可以检查 strcomp 是否返回 > 0,但办公室 IP 可能会根据我连接的位置而变化,而我本地的 IP 几乎是静态的。而且我不太清楚在进行字符串比较时如何确定 -1 和 1。是在进行长度比较吗?
答案1
http://icanhazip.com返回带有换行符的 IP(请注意,在您的示例中,IP 地址和 -1 或 1 之间有一条线)。
改用这个:
externalip = replace(http.responseText, chr(10), "")
这将用空值替换换行符,并且应该可以正确进行比较。
回答你的问题,-1 0 和 1 取决于字符串的排序方式。例如,0 在 1 之前,所以你会得到 -1。T 在 A 之后,所以你会得到 1。T = T,所以你会得到 0