首页 > 解决方案 > 将等号传递给字符串

问题描述

VBScript 并不是我真正喜欢的东西,而是涉猎。

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

尝试增强脚本以能够执行相反的操作 - 即:启用并启动。这些将从 Windows 计划任务中运行,因此只想传入一个“开”或“关”的参数

所以顶部是这样的:

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 运行时错误:类型不匹配:'[string:"Stopped = Running"]'

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

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

尝试使用cstr所有变量,但这没有任何区别。

标签: vbscript

解决方案


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

您可以通过以下两种方式中的一种来解决这个问题——(几乎)好的方式和邪恶的方式——你的选择......

好的

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

If symbol = "=" Then...

邪恶的

(愿你的灵魂永远在地狱中沸腾……)

不要相信炒作 - 如果您计划正确并正确清洁琴弦,您应该没问题。

Eval是关键,或者,在 VBScript 的情况下,Execute.

只是要非常小心——它很容易被滥用

另外,您的情况可能实际上并不适合Execute. 您可能需要使用上面的第一个或“好”选项。


推荐阅读