清除/删除VBsscript(.vbs)代码

时间:2017-07-12 15:10:39

标签: vbscript filesystemobject

在我的大多数VBscripts(.vbs文件)的顶部,我有以下代码:

Option Explicit
Const ForReading = 1
Dim objFSO, objFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("Z:\somepath\somefile.vbs", ForReading)
Execute objFile.ReadAll()

此代码允许我将另一个vbs文件用作库。在这种情况下,somefile.vbs将是我的库,并且定义了从脚本中调用的所有子函数和调用上述代码(我称之为调用脚本)。

此问题:每隔一段时间,其中一个脚本似乎会删除Z:\somepath\somefile.vbs中的代码(调用脚本读取的库脚本)。

我认为这是因为如果我的“任务管理器进程”选项卡中列出了wscript.exe,并且当我再次打开Z:\somepath\somefile.vbs时几乎立即从备份位置还原Z:\somepath\somefile.vbs文件,该文件中没有代码。但是如果我杀了wscript.exe进程,文件就可以了。我无法重现这种行为,因为它只会在我们的网络出现某种打嗝时发生(我认为)。

我首先想到的是当我使用这一行时create设置错误:

Set objFile = objFSO.OpenTextFile("Z:\somepath\somefile.vbs", ForReading)

但根据此链接,默认create值应为false: https://msdn.microsoft.com/en-us/library/aa265347(v=vs.60).aspx

请注意,巧合的是,我还在文件objFile中使用objFSOsomefile.vbs个变量来处理与我在调用脚本中所做的事情无关的事情。例如,objFile文件中的somefile.vbs具有完全不同的名称和位置,并以这种方式创建:

Set objFile = objFSO.OpenTextFile("z:\differentpath\differentname.vbs", ForAppending, True)

我猜这是问题,但我不明白。 有人可以对此有所了解吗? createappend设置是否会在调用脚本中重置?这有什么作用?

我不知道还能做什么我将somefile.vbs文件中的变量名称更改为oFSO, oFile,而在调用脚本中,它们仍然是objFSO, objFile。我还更改了调用脚本中的代码行,以便为false设置包含create,如下所示:

Set objFile = objFSO.OpenTextFile("Z:\somepath\somefile.vbs", ForReading,false)

2 个答案:

答案 0 :(得分:1)

https://ss64.com/vb/execute.html

了解到
  

Execute接受一组语句并在本地范围内执行它们,ExecuteGlobal在全局范围内执行它们。

     

但是,如果在过程之外(即在全局范围内)调用相同的Execute语句,它不仅会继承全局范围内的所有内容,而且还可以从任何地方调用它,因为它的上下文是全局的。 / p>

如果您将Execute表单调用为过程,问题是否仍然存在?

答案 1 :(得分:1)

走出困境(因为你只发布了部分代码)我会假设你在阅读后没有明确关闭你的库脚本,所以你的主脚本会保持文件打开直到它终止。在objFile.Close语句后添加一行Execute,或者(更好)更改

Set objFile = objFSO.OpenTextFile("Z:\somepath\somefile.vbs", ForReading)
Execute objFile.ReadAll()

code = objFSO.OpenTextFile("Z:\somepath\somefile.vbs").ReadAll
Execute code

或只是

Execute objFSO.OpenTextFile("Z:\somepath\somefile.vbs").ReadAll

以便在读取文件后自动关闭。