如何在下次运行脚本时保留全局变量的值?

时间:2015-08-03 20:50:48

标签: vbscript

我有一个VBScript文件,它是从另一个调用的,它定义了一些全局变量,类似于每个函数和子函数之外的Dim var="whatever"。这些变量可能会发生变化,可能是var="whatever2"这样的指令,并且它们的新值可能会在其他VBScript文件执行的某些调用中使用。但问题是,每次调用文件时,它们的值都会重置为定义全局值的位置,因此它会再次使用相同的值。

我看到两种解决方法:一种是创建一个文本文件,其中写入所有实际的正确值,然后在调用脚本时从该文本文件中读取它们,尽管我想必须有更好的方法。另一个是继续使用调用参数,但这可能会使应用程序复杂化,这正是使用全局变量的原因,所以我认为这不是一个真正的选择。我也认为在一个函数中设置值不会有太大帮助,因为无论如何它们都会被重置。

关于我所说的事情怎么样都可以做到?

2 个答案:

答案 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编辑器编辑文件。

     

一个文件中的多个作业

     

将所有代码存储在一个位置