【问题标题】:Pass equals symbol into a string将等号传递给字符串
【发布时间】:2018-04-25 18:28:24
【问题描述】:

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"]'

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

是否可以将=&lt;&gt; 传入字符串进行比较?

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

【问题讨论】:

  • 您正在尝试将字符串评估为布尔值 (objProcess.State &amp; symbol &amp; states)。 &amp; 是一个连接符号。
  • 另外,在上面的代码中,ONOFF 状态都为“正在运行”。
  • 嗨,是的,我知道,符号变量确实是重要的变量,因为它将用于传递检查是 = 还是 运行。可以想到其他方法来编写脚本,只是想知道为什么这种方法不起作用,因为打字会更少。

标签: vbscript


【解决方案1】:

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

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

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

If symbol = "=" Then...

邪恶

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

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

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

请务必小心 - 它容易被滥用

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

【讨论】:

  • 干杯保罗。我想我只会使用两个单独的程序。一种停止和禁用,一种启用和停止 - 基于命令行参数。感谢您花时间向我展示我的方法的错误并为我节省一些浪费的精力!
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 2018-12-13
  • 2014-09-06
  • 1970-01-01
  • 2012-06-13
  • 2020-04-08
  • 2016-06-01
  • 2011-08-16
相关资源
最近更新 更多