中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » vbs有没有类似<!--#include file="DB.asp"-->的写法
作者:
标题: vbs有没有类似<!--#include file="DB.asp"-->的写法 上一主题 | 下一主题
picat
初级用户





积分 150
发帖 68
注册 2007-4-26
状态 离线
『楼 主』:  vbs有没有类似<!--#include file="DB.asp"-->的写法

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


2007-8-21 10:41
查看资料  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

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


2007-8-21 11:22
查看资料  发短消息  网志   编辑帖子  回复  引用回复
picat
初级用户





积分 150
发帖 68
注册 2007-4-26
状态 离线
『第 3 楼』:  

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


2007-8-21 11:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

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不是也要引用?只是它个格式简单罢了…… 函数,和过程通吃!


2007-8-21 11:38
查看资料  发短消息  网志   编辑帖子  回复  引用回复
picat
初级用户





积分 150
发帖 68
注册 2007-4-26
状态 离线
『第 5 楼』:  

过程和函数可以这样直接引用?那太好了。之前是我理解错了,谢谢slore兄!~~


2007-8-21 11:46
查看资料  发短消息  网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 6 楼』:  

貌似不行的说. Execute的定义代码不能在当前的vbs中使用.


2007-8-21 16:59
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  

Originally posted by sonicandy at 2007-8-21 16:59: 貌似不行的说. Execute的定义代码不能在当前的vbs中使用.
实践去检验…… 不要貌似


2007-8-21 18:03
查看资料  发短消息  网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 8 楼』:  

我检验过了,确实不行. 这两天正好完成了一个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


2007-8-21 18:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  不知道你是如何检验的

截图:


附件 1: Test.gif (2007-8-21 21:08, 29.35 KiB,下载次数: 1)


2007-8-21 21:08
查看资料  发短消息  网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 10 楼』:  

不知道为什么,我这里没有反应..


2007-8-21 22:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 11 楼』:  

可以了,原来是漏掉了下边的调用..


2007-8-21 22:17
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 12 楼』:  

我是XP SP2,你是什么系统?如果一样就奇怪了……


2007-8-21 22:17
查看资料  发短消息  网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 13 楼』:  

太好了


2007-8-21 22:20
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 14 楼』:  

。。。。你不调用…… 当然没有反映,还我也郁闷……(我还是高亮处理都看不到呀)


2007-8-21 22:22
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: