将等号传递给字符串

时间:2018-04-25 08:02:59

标签: vbscript

VBScript不是我的事,而是涉猎。

基本上我有一个脚本,它将查找包含一组机器名的文本文件,然后检查服务是否正在运行,如果是,则停止并禁用它,如果没有运行则检查它是否已启用然后禁用它。注销开始状态和结束状态。

尝试增强脚本以便能够执行相反操作 - 即:启用和启动。 这些将从Windows预定任务运行,所以想要传递一个参数“On”或“Off”

顶部是这样的:

Function Toggle
    If UCase(WScript.Arguments(0)) = "ON" Then  states = "Running" End If 
    If UCase(WScript.Arguments(0)) = "OFF" Then  states =  "Running" End If 
    If UCase (WScript.Arguments(0)) = "ON" Then symbol = " = " End If
    If UCase (WScript.Arguments(0)) = "OFF" Then  symbol = " <> " End If 
End Function

但是当我尝试使用这些来比较服务的状态时,可以进一步使用:

If InStr(objProcess.DisplayName,strService) > 0 And objProcess.State & symbol & states  Then Status = True 
  

Microsoft VBScript运行时错误:Typemismatch:'[string:“Stopped = Running”]'

如果我注释掉符号变量并使用=符号,则比较有效。

是否可以将=<>传入字符串进行比较?

在所有变量周围使用cstr尝试但没有区别。

1 个答案:

答案 0 :(得分:0)

您遇到问题的原因如前所述,您实际上是在尝试对连接字符串执行布尔操作。

你可以绕过这两种方式中的一种 - (几乎)方式和邪恶方式 - 你的选择...

GOOD

编写一个小型处理器来评估字符串......

If symbol = "=" Then...

EVIL

(May your soul boil in hell for all eternity...)

不要相信炒作 - 如果你正确地计划并正确地清理你的琴弦你应该没事。

Eval是关键,或者更确切地说是VBScript的情况,Execute

要非常小心 - 可以滥用

另外,您的情况可能实际上不适合Execute。您可能需要使用第一个或者好的&#39;上面的选项。