在 VBScript 中将字符串转换为变量名

Convert string to variable name in VBScript

如何在 VBscript 中将字符串转换为变量名?我为 JavaScript, C#, Pyton, Perl, Ruby, Java 找到了类似的 Q/A,但对于 VBscript 却没有。

这就是为什么我不能直接使用变量而不是字符串的原因:

有一个逗号分隔的权限列表 names,我从网络服务中获得。项目经理可以随时更新此列表,并希望我检查软件用户是否被授予这些权限。用户的权限是在 运行 时间内通过复杂的方法以及配置文件数据、软件活动历史记录等设置的。如果用户购买了 1000 件产品,变量 SuperCustomerPermission 将在页面的 header 中使用 SuperCustomerPermission="yes" 为他设置(不是作为 cookie 或 session 也不存储在数据库中)。

要检查权限列表,我想将权限列表 names 传递给函数并循环遍历名称:

我从网络服务获得的权限名称:

permissionNames = "adminPermission,deletePermission,configPermission,SuperCustomerPermission"

我尝试将这些字符串作为变量传递给子例程:

Sub checkPermission(PermissionNames)
    permissionNamesArray = split(permissionNames,",",-1,1)
    For Each x In permissionNamesArray
        'How to convert x to its variable equivalent and check if it equals "yes"
    Next
End Sub

Call checkPermission(permissionNames)

如果可以将其放入应用程序或会话中,您可以执行类似 session(variableName) = 5.

的操作

如果没有,下一个最简单的方法是使用字典:

Dim myDict
Set myDict= CreateObject("Scripting.Dictionary")
myDict.Add (variableName, value)

使用字典应该适合您的情况,而且更简洁。

话虽如此,既然您要求 Execute 解决方案,您可以这样做:

Sub checkPermission(PermissionNames)
    Dim permissionNamesArray, x

    permissionNamesArray = split(permissionNames,",",-1,1)
    For Each x In permissionNamesArray
        Dim valueOfX
        Execute "valueOfX = " & x
        WScript.Echo valueOfX
    Next
End Sub

用法示例:

' Adding some values to the variables
Dim adminPermission, deletePermission, configPermission, SuperCustomerPermission
adminPermission = "yes"
deletePermission = "no"
configPermission = "yes"
SuperCustomerPermission = "no"

' Storing names of variables
Dim permissionNames
permissionNames = "adminPermission,deletePermission,configPermission,SuperCustomerPermission"

' Passing variables by names
checkPermission(permissionNames)

输出:

yes
no
yes
no