vbscript - 将等号传递给字符串
问题描述
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
所有变量,但这没有任何区别。
解决方案
如前所述,您遇到问题的原因实际上是在尝试对连接的字符串执行布尔运算。
您可以通过以下两种方式中的一种来解决这个问题——(几乎)好的方式和邪恶的方式——你的选择......
好的
编写一个小型处理器来评估字符串...
If symbol = "=" Then...
邪恶的
不要相信炒作 - 如果您计划正确并正确清洁琴弦,您应该没问题。
Eval
是关键,或者,在 VBScript 的情况下,Execute
.
只是要非常小心——它很容易被滥用。
另外,您的情况可能实际上并不适合Execute
. 您可能需要使用上面的第一个或“好”选项。
推荐阅读
- r - R:生成一个数据框来保存未知数量的元素
- c# - 通过c#转到XML文件中的内部多个元素的问题
- c - 初始化数组中的结构
- pine-script - 未声明的直方图标识符 [Pine Scripts]
- php - 如何使用php隐藏带有空单元格的表格行
- c# - WPF Datagrid 不显示 itemSource 数据
- javascript - 如何让 CSS 伪选择器作用于元素?
- reactjs - TypeError:posts.map 不是函数
- spring-boot - 自动创建不存在的目录 Spring Integration SFTP
- c++ - 如何在 Visual Studio 中签署控制台应用程序