我目前正在开发许多VBScript脚本,用于BlueZone终端模拟器。其中许多文件需要访问与脚本本身存储在相同位置的外部数据文件。在我自己的计算机上,我已经将完整的路径名硬编码到脚本中,它们工作得很好,但是我现在正试图通过一个私有的Git存储库在办公室重新分发这些脚本,并且遇到了一个问题。
显然,由于文件存储在不同的计算机上,包括共享驱动器,硬编码目录名不再工作,所以我需要一种方法来读取脚本存储的目录的名称。我找到的所有建议都说,WScript.ScriptFullName命令会给我这个建议。不幸的是,由于这些脚本是通过BlueZone运行的,我实际上无法访问该对象,但情况有点混乱。
例如,下面的代码行似乎像预期的那样工作:
Dim myObject : Set myObject = CreateObject("WScript.Network")这一点也是如此:
Dim myObject : Set myObject = CreateObject("WScript.Shell")但这个不是:
MsgBox WScript.Name相反,我得到了如下错误消息:
BlueZone错误消息
下面一行的错误消息略有不同:
Dim myObject : Set myObject = CreateObject("WScript")因此,我似乎可以访问WScript的子对象,但不能访问对象本身,这没有多大意义。BlueZone环境似乎使用自己的自动化对象作为WScript对象的替代品,但是文档中没有任何关于访问BlueZone本身下配置的脚本目录的内容。
另一次尝试是以下代码:
Dim myObject : Set myObject = CreateObject("Scripting.FileSystemObject")
Dim WD : WD = myObject.GetAbsolutePathName (".")但这只会给出BlueZone本身的目录,而不是脚本目录。除了对每个脚本的每个单独副本进行硬编码(这意味着不能使用中央存储库)之外,我没有看到任何其他方法来解决这个问题。
有什么想法吗?
发布于 2016-01-08 09:53:31
解决了!
经过一番研究,BlueZone支持终于在BlueZone主机自动化对象中找到了一个无文档的ScriptFolder()方法。
所以密码:
Set bzhao = CreateObject("BZWhll.WhllObj")
bzhao.Connect ""
MsgBox bzhao.ScriptFolder在功能上与行类似:
MsgBox WScript.ScriptFullName我不确定这两种方法是否完全等价,但就我的目的而言,它已经足够了。
发布于 2016-01-06 14:06:47
您的脚本主机不提供WScript对象(它与WScript.Shell COM对象无关)。cscript.exe和wscript.exe提供了这个对象,其他脚本主机,比如mshta.exe (显然是BlueZone)没有提供这个对象。
除非Rocket为您提供了获得脚本路径的替代方法,否则我看到的唯一解决办法是启动每个脚本,并将工作目录设置为包含脚本的目录。这样您就可以获得这样的脚本路径:
Set fso = CreateObject("Scripting.FileSystemObject")
cwd = fso.GetAbsolutePathName(".")或者像这样:
Set sh = CreateObject("WScript.Shell")
cwd = sh.CurrentDirectoryhttps://stackoverflow.com/questions/34632864
复制相似问题