1

Я не могу заставить 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

Это никогда не вернет 0, даже если externalip верен. Странно то, что во внешнем чипе, кажется, есть дополнительный CR/LF. Я пытался использовать функцию обрезки, но это не помогает. Вот пример вывода при подключении к офису:

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

А вот и выход при подключении к моему локальному провайдеру (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 ответ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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .