中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-30 23:16
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » vbs有没有类似<!--#include file="DB.asp"-->的写法 查看 959 回复 13
楼 主 vbs有没有类似<!--#include file="DB.asp"-->的写法 发表于 2007-08-21 10:41 ·  中国 上海 电信张江机房
初级用户
★★
积分 150
发帖 68
注册 2007-04-26 00:18
19年会员
UID 86476
性别 男
状态 离线
lfzzj已经发过类似的问题,但是他可能没把问题描述清楚,所以没人回答。
具体情况是这样的:
我创建了若干操作sql 2000 的vbs文件,由于是对同一个数据库进行操作,所以想把跟数据库配置相关的信息都放到dbsetting.vbs文件里,供上面所有的这些vbs来调用,类似asp中的写法<!--#include file="DBsettingl.vbs"-->,我只要把它加入到上面的vbs文件中就可以了,也类似C中调用头文件的做法,vbs有没有类似的写法?具体该怎么写呢?
搜索了很久也没找到答案,也可能跟我没找到合适的关键字有关,还请知道的TX告知,或者如果坛子里已经有的话,能告诉我用什么关键字去查找,谢谢了!
2 发表于 2007-08-21 11:22 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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
3 发表于 2007-08-21 11:27 ·  中国 上海 电信张江机房
初级用户
★★
积分 150
发帖 68
注册 2007-04-26 00:18
19年会员
UID 86476
性别 男
状态 离线
LS的这个写法用是可以用了,就是麻烦了点,需要再次引用,而且我可能在dbsetting.vbs里加入了一些函数和过程,本来asp可以直接调用的,vbs看来是不行了...,有点失望啊。不过还是感谢slore兄;)
4 发表于 2007-08-21 11:38 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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不是也要引用?只是它个格式简单罢了……
函数,和过程通吃!
5 发表于 2007-08-21 11:46 ·  中国 上海 电信张江机房
初级用户
★★
积分 150
发帖 68
注册 2007-04-26 00:18
19年会员
UID 86476
性别 男
状态 离线
过程和函数可以这样直接引用?那太好了。之前是我理解错了,谢谢slore兄!~~
6 发表于 2007-08-21 16:59 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
貌似不行的说.
Execute的定义代码不能在当前的vbs中使用.
7 发表于 2007-08-21 18:03 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Originally posted by sonicandy at 2007-8-21 16:59:
貌似不行的说.
Execute的定义代码不能在当前的vbs中使用.


实践去检验……

不要貌似
8 发表于 2007-08-21 18:40 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
我检验过了,确实不行.
这两天正好完成了一个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
9 不知道你是如何检验的 发表于 2007-08-21 21:08 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
截图:
附件
Test.gif
10 发表于 2007-08-21 22:15 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
不知道为什么,我这里没有反应..
11 发表于 2007-08-21 22:17 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
可以了,原来是漏掉了下边的调用..
12 发表于 2007-08-21 22:17 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
我是XP SP2,你是什么系统?如果一样就奇怪了……
13 发表于 2007-08-21 22:20 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
太好了
14 发表于 2007-08-21 22:22 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
。。。。你不调用……
当然没有反映,还我也郁闷……(我还是高亮处理都看不到呀)
论坛跳转: