如果声明/逻辑,VBS破坏

时间:2013-11-15 20:37:33

标签: if-statement vbscript registry operators logic

我的逻辑/代码非常简单,从SQL表计数行,将此值存储到注册表项。如果从SQL查询中读取的值大于RegKey的值,请使用查询结果更新RegKey的值,同样将值保存到日志文件中。如果,SQL查询的值等于RegKey值,则不将结果存储到RegKey,而是将0写入日志文件。

我运行此代码,似乎它不喜欢我的IF语句/运算符。测试一下,如果我设置操作“tempSQLCount(0,0)< strRegKeyVal”或“tempSQLCount(0,0)<> strRegKeyVal”,它似乎才有效。在我的场景中,SQLCounter永远不会小于,仅大于或等于。

    strRegKeyVal = readfromRegistry("HKEY_LOCAL_MACHINE\SOFTWARE\SQLCounter1", "ha")
'Dim intRegKeyVal = CInt(strRegKeyVal)

If tempSQLCount(0,0) > strRegKeyVal Then
    'update row counter value to regKey 
    strValueName = "SQLCounter1"
    objRegistry.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
    objRegistry.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,tempSQLCount(0,0)

    Set objFSO=CreateObject("Scripting.FileSystemObject")

    'write to log
    outFile="C:\Logs\some.log"
    Set objFile = objFSO.CreateTextFile(outFile,True)
    objFile.Write tempSQLCount(0,0) & vbCrLf
    objFile.Close
End If
If tempSQLCount(0,0) = strRegKeyVal Then
    'update row counter value to regKey 

    Set objFSO=CreateObject("Scripting.FileSystemObject")

    'write to log
    outFile="C:\Logs\some.log"
    Set objFile = objFSO.CreateTextFile(outFile,True)
    objFile.Write 0 & vbCrLf
    objFile.Close
End If

1 个答案:

答案 0 :(得分:0)

直接获取逻辑并将数字转换为正确的类型。 (这主要是评论者建议的内容,但是对于代码改进很难阅读评论):

dim strRegKeyVal, sqlCountToReport, sqlCount

' both values are converted to Int
strRegKeyVal = cInt(readfromRegistry("HKEY_LOCAL_MACHINE\SOFTWARE\SQLCounter1", "ha"))
sqlCount = cInt(tempSQLCount(0,0))

' Conditional registry write part
If sqlCount > strRegKeyVal Then
    'update row counter value to regKey 
    strValueName = "SQLCounter1"
    objRegistry.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
    objRegistry.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName, sqlCount
    sqlCountToReport = sqlCount
else
    sqlCountToReport = 0    
End If

' Write to log part
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\Logs\some.log", True)
objFile.Write sqlCountToReport & vbCrLf
objFile.Close

您的脚本由两部分组成:注册表更新部分和日志写入部分。将它拆分为两个任务更容易调试。 流程有点不同;这也涵盖了cInt(tempSQLCount(0,0)) < strRegKeyVal的情况,但这种情况不应该发生。