我有一个VBScript文件,它是从另一个调用的,它定义了一些全局变量,类似于每个函数和子函数之外的Dim var="whatever"
。这些变量可能会发生变化,可能是var="whatever2"
这样的指令,并且它们的新值可能会在其他VBScript文件执行的某些调用中使用。但问题是,每次调用文件时,它们的值都会重置为定义全局值的位置,因此它会再次使用相同的值。
我看到两种解决方法:一种是创建一个文本文件,其中写入所有实际的正确值,然后在调用脚本时从该文本文件中读取它们,尽管我想必须有更好的方法。另一个是继续使用调用参数,但这可能会使应用程序复杂化,这正是使用全局变量的原因,所以我认为这不是一个真正的选择。我也认为在一个函数中设置值不会有太大帮助,因为无论如何它们都会被重置。
关于我所说的事情怎么样都可以做到?
答案 0 :(得分:1)
全局变量仅在其进程运行时才存在。如果您需要保留这些变量的值,以便稍后再次运行脚本时它们可用,则需要将它们存储在其他位置。
规范方法是将值保存到文件中:
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\path\to\mystate.txt")
f.Write "var1=" & var1
f.Write "var2=" & var2
...
f.Close
或注册表:
Set sh = CreateObject("WScript.Shell")
sh.RegWrite "HKCU\Software\mystate\var1", var1, "REG_SZ"
sh.RegWrite "HKCU\Software\mystate\var2", var2, "REG_DWORD"
...
但是,如果您只需要在当前用户会话期间使用它们,您还可以使用易变环境:
Set sh = CreateObject("WScript.Shell")
Set env = sh.Environment("VOLATILE")
env("mystate_var1") = var1
env("mystate_var2") = var2
...
易变环境仅适用于当前用户,并在用户注销时消失。
答案 1 :(得分:0)
考虑使用COM对象作为从属对象。
脚本组件生成vbscript COM对象。 WSF脚本文件在一个文件中包含许多脚本,并且可以引用其他文件。
来自帮助
Windows®脚本组件为您提供了一种在脚本中创建功能强大,可重用的COM组件的简便方法。您可以使用支持Microsoft®ActiveX®Scripting接口的任何脚本语言创建脚本组件。支持这些接口的脚本语言包括JScript,Microsoft®VisualBasic®ScriptingEdition(VBScript),PERLScript,PScript和Python。
COM支持
这种新的脚本组件技术支持常见类型的COM组件,例如自动化,并且可以使用诸如DHTML行为之类的附件进行扩展。
脚本组件:
小而有效。
易于创建,维护和部署。
提供创建COM组件的功能。
提供对各种系统服务的访问。
使用脚本组件,您可以为各种任务创建COM组件,例如执行中间层业务逻辑,访问和操作数据库数据,向应用程序添加事务处理,以及使用DHTML行为向Web页面添加交互式效果
和wsf文件。
Windows脚本(* .wsf)文件是包含可扩展标记语言(XML)代码的文本文档。它结合了多种功能,为您提供更高的脚本编写灵活性。由于Windows脚本文件不是特定于引擎的,因此它们可以包含来自任何Windows脚本兼容脚本引擎的脚本。它们充当容器。
其他功能
.wsf文件支持您可以
包含声明
将VBScript或JScript文件中的函数合并到Windows Script Host项目中。
多个引擎 每个文件使用多种脚本语言。
输入库 在代码中添加常量。
工具
使用任何XML编辑器编辑文件。
一个文件中的多个作业
将所有代码存储在一个位置