Board logo

标题: vbs有没有类似<!--#include file="DB.asp"-->的写法 [打印本页]

作者: picat     时间: 2007-8-21 10:41    标题: vbs有没有类似<!--#include file="DB.asp"-->的写法
lfzzj已经发过类似的问题,但是他可能没把问题描述清楚,所以没人回答。
具体情况是这样的:
我创建了若干操作sql 2000 的vbs文件,由于是对同一个数据库进行操作,所以想把跟数据库配置相关的信息都放到dbsetting.vbs文件里,供上面所有的这些vbs来调用,类似asp中的写法<!--#include file="DBsettingl.vbs"-->,我只要把它加入到上面的vbs文件中就可以了,也类似C中调用头文件的做法,vbs有没有类似的写法?具体该怎么写呢?
搜索了很久也没找到答案,也可能跟我没找到合适的关键字有关,还请知道的TX告知,或者如果坛子里已经有的话,能告诉我用什么关键字去查找,谢谢了!

作者: slore     时间: 2007-8-21 11:22
Test.ini:

slore = ""
vbs = "VBscript脚本"
bat = "批处理"


VBS脚本添加:

Const ForReading = 1
Dim objFSO,objFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("Test.ini", ForReading)
Execute objFile.ReadAll
objFile.Close
Set
objFile = Nothing
Set
objFSO = Nothing

'-----------调用演示-------------
MsgBox slore & vbs & bat

作者: picat     时间: 2007-8-21 11:27
LS的这个写法用是可以用了,就是麻烦了点,需要再次引用,而且我可能在dbsetting.vbs里加入了一些函数和过程,本来asp可以直接调用的,vbs看来是不行了...,有点失望啊。不过还是感谢slore兄;)

作者: slore     时间: 2007-8-21 11:38
ini文件:
slore = ""
vbs = "VBscript脚本"
bat = "批处理"

Sub MySub(name)
MsgBox "演示一个过程" & vbCrLf & "slore=" & name
End Sub

Function
MyFunction(name)
MyFunction = name
End Function


vbs:
Const ForReading = 1
Dim objFSO,objFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("Test.ini", ForReading)
Execute objFile.ReadAll
objFile.Close
Set
objFile = Nothing
Set
objFSO = Nothing

'-----------调用演示-------------
MsgBox slore & vbs & bat
Call MySub("名字") '调用过程
MsgBox MyFunction("我是一个函数")

需要再次引用?什么意思?
ASP不是也要引用?只是它个格式简单罢了……
函数,和过程通吃!

作者: picat     时间: 2007-8-21 11:46
过程和函数可以这样直接引用?那太好了。之前是我理解错了,谢谢slore兄!~~

作者: sonicandy     时间: 2007-8-21 16:59
貌似不行的说.
Execute的定义代码不能在当前的vbs中使用.

作者: slore     时间: 2007-8-21 18:03
Originally posted by sonicandy at 2007-8-21 16:59:
貌似不行的说.
Execute的定义代码不能在当前的vbs中使用.


实践去检验……

不要貌似

作者: sonicandy     时间: 2007-8-21 18:40
我检验过了,确实不行.
这两天正好完成了一个MakeFile类:

Dim o
Set o = new CMakeFile
Call o.start("test.vbs")
Set o = Nothing

' 代码执行器,可以整合包含以下个是的脚本
' #include "文件名"
Class CMakeFile
Private fso ' 文件系统对象
Private dic ' 字典对象
Private shell
Private stream
Property Get FILE_NOT_FOUND()
FILE_NOT_FOUND = vbObjectError + 513
End Property
Property Get CLASS_NAME()
CLASS_NAME = "CMakeFile"
End Property
Sub class_initialize()
Set fso = CreateObject("scripting.filesystemobject")
Set dic = CreateObject("scripting.dictionary")
Set shell = CreateObject("wscript.shell")
End Sub
Sub class_terminate()
Set fso = Nothing
Set dic = Nothing
Set shell = Nothing
End Sub
Public Sub Require(filename)
On Error Resume Next
' 判断是否已经打开过此文件
If dic.exists(filename) Then
Exit Sub
Else
Call dic.add(filename,"")
End If
filename = fso.getabsolutepathname(filename)
If fso.fileexists(filename) Then
Dim file,line,buffer,arr
Set file = fso.opentextfile(filename,1,true)
line = 0
While Not file.atendofstream
line = line + 1
buffer = file.readline
If instr(1,buffer,"#include",vbTextCompare) = 1 Then
arr = Split(buffer,"""")
Call Require(arr(1))
If Err.number<>0 Then
Call Err.raise(Err.number,Err.source,"抛出异常在 " & filename & " 的第" & line & "行." & vbcrlf & Err.description)
End If
Else
Call stream.writeline(buffer)
End If
Wend
Call file.close()
Set file = Nothing
Else
Call Err.raise(FILE_NOT_FOUND,CLASS_NAME,"没有找到文件 """ & filename & """")
End If
End Sub

Sub Start(filename)
Set stream = fso.opentextfile("output.vbs",2,True)
Call require(filename)
If Err.number<>0 Then
Call MsgBox("错误: #" & Err.number & "源:" & Err.source & vbcrlf & "描述:" & vbcrlf & Err.description)
Else
Call MsgBox("output.vbs 成功生成!")
End If
Call stream.close()
Set stream = Nothing
End Sub

End Class

作者: slore     时间: 2007-8-21 21:08    标题: 不知道你是如何检验的
截图:
附件 1: Test.gif (2007-8-21 21:08, 29.35 KiB,下载次数: 1)



作者: sonicandy     时间: 2007-8-21 22:15
不知道为什么,我这里没有反应..

作者: sonicandy     时间: 2007-8-21 22:17
可以了,原来是漏掉了下边的调用..

作者: slore     时间: 2007-8-21 22:17
我是XP SP2,你是什么系统?如果一样就奇怪了……

作者: sonicandy     时间: 2007-8-21 22:20
太好了

作者: slore     时间: 2007-8-21 22:22
。。。。你不调用……
当然没有反映,还我也郁闷……(我还是高亮处理都看不到呀)