Vbscript 如何在下次运行脚本时保留全局变量的值?
我有一个VBScript文件,它是从另一个调用的,它定义了一些全局变量,比如在每个函数和子函数之外的Vbscript 如何在下次运行脚本时保留全局变量的值?,vbscript,Vbscript,我有一个VBScript文件,它是从另一个调用的,它定义了一些全局变量,比如在每个函数和子函数之外的Dim var=“whatever”。这些变量可能会发生变化,可能是一条指令,比如var=“whatever2”,它们的新值可能会在其他VBScript文件所做的某些调用中使用。但问题是,每次调用文件时,它们的值都会重置为在定义全局值的位置显示的值,因此它会再次使用相同的值 我认为有两种方法可以解决这个问题:一种是创建一个文本文件,其中写入了所有实际正确的值,然后在调用脚本时从该文本文件中读取这些
Dim var=“whatever”
。这些变量可能会发生变化,可能是一条指令,比如var=“whatever2”
,它们的新值可能会在其他VBScript文件所做的某些调用中使用。但问题是,每次调用文件时,它们的值都会重置为在定义全局值的位置显示的值,因此它会再次使用相同的值
我认为有两种方法可以解决这个问题:一种是创建一个文本文件,其中写入了所有实际正确的值,然后在调用脚本时从该文本文件中读取这些值,尽管我认为必须有更好的方法。另一个是继续使用参数进行调用,但这可能会使应用程序复杂化很多,这正是使用全局变量的原因,所以我认为这不是一个真正的选择。我还认为,在函数中设置值不会有多大帮助,因为它们无论如何都会在之后重置
你知道我所说的是什么吗?全局变量只有在其进程运行时才有效。如果需要持久化这些变量的值,以便在稍后再次运行脚本时它们可用,则需要将它们存储在其他位置 规范方法正在将值保存到文件中:
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"
...
但是,如果您只需要它们在当前用户会话期间可用,还可以使用volatile环境:
Set sh = CreateObject("WScript.Shell")
Set env = sh.Environment("VOLATILE")
env("mystate_var1") = var1
env("mystate_var2") = var2
...
易失性环境仅对当前用户可用,当用户注销时将消失。考虑使用COM对象作为从属对象 脚本组件生成vbscript COM对象。WSF脚本文件在一个文件中包含多个脚本,可以引用其他文件 从帮助 Windows®脚本组件为您提供了在脚本中创建功能强大、可重用的COM组件的简便方法。您可以使用支持Microsoft®ActiveX®脚本接口的任何脚本语言创建脚本组件。支持这些接口的脚本语言包括JScript、Microsoft®Visual Basic®Scripting Edition(VBScript)、PERLScript、PScript和Python COM支持 这种新的脚本组件技术支持常见类型的COM组件,如自动化,并可通过附加组件(如DHTML行为)进行扩展 脚本组件: 它们体积小,效率高 易于创建、维护和部署 提供创建COM组件的能力 提供对广泛系统服务的访问 使用脚本组件,您可以为各种任务创建COM组件,例如执行中间层业务逻辑、访问和操作数据库数据、向应用程序添加事务处理,以及使用DHTML行为向网页添加交互效果 和wsf文件 Windows脚本(*.wsf)文件是包含可扩展标记语言(XML)代码的文本文档。它包含了几个特性,为您提供了更大的脚本编写灵活性。因为Windows脚本文件不是特定于引擎的,所以它们可以包含来自任何与Windows脚本兼容的脚本引擎的脚本。它们就像一个容器 附加功能 .wsf文件支持您可以 包括声明 将VBScript或JScript文件中的函数合并到Windows脚本宿主项目中 多引擎 每个文件使用多个脚本语言 类型库 向代码中添加常量 工具 使用任何XML编辑器编辑文件 一个文件中有多个作业 将所有代码存储在一个位置