中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-28 23:52
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]VBS可不可读取这种INI文件 查看 812 回复 5
楼 主 [讨论]VBS可不可读取这种INI文件 发表于 2007-12-05 07:40 ·  中国 浙江 杭州 联通
初级用户
积分 42
发帖 17
注册 2005-08-28 14:49
20年会员
UID 42027
状态 离线

SvcDir=\\192.168.0.252\Game\NetGame\QQ
DisDir=E:\NetGame\QQ
RunDir=QQ.exe
RegDir=QQ.Reg
RunCmd=Play.bat


SvcDir=\\192.168.0.252\Game\Ghost\QQGame
DisDir=E:\NetGame\QQGame
RunDir=QQGame.exe
RegDir=QQGame.Reg
RunCmd=Play.bat


SvcDir=\\192.168.0.252\Game\Ghost\456Game
DisDir=E:\NetGame\456Game
RunDir=lobby.exe
RegDir=456Game.reg
RunCmd=Play.bat

如脚本名为abc.vbs
我可以用“abc.vbs QQ游戏”调用下的参数
P处理是可以实现的 VBS想了很久还没想到
下面的脚本只能读取INI里最后一节参数


On Error Resume Next
Set oShell = Wscript.CreateObject("Wscript.Shell")
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
Gamename = objArgs(I)
Next
SvcDir = GetIni (Gamename,"SvcDir","Gamecfg.ini")
DisDir = GetIni (Gamename,"DisDir","Gamecfg.ini")
RunDir = GetIni (Gamename,"RunDir","Gamecfg.ini")
RegDir = GetIni (Gamename,"RegDir","Gamecfg.ini")
RunCmd = GetIni (Gamename,"RunCmd","Gamecfg.ini")
Runfile = "Xxcopy " & SvcDir & " " & DisDir & " /pb/s/k/h/bi/yy/zy"
oShell.run Runfile,0,true
oShell.run RunCmd,0,true
oShell.run "Regedit /s RegDir",0,true
oShell.run RunDir

Function GetIni(strPrimary, strSubKey, strIniFilePath)
Dim fso, Myfile, intCount, strState
Set fso = CreateObject("Scripting.FileSystemObject")
Set Myfile = fso.OpenTextFile(strIniFilePath, 1, False, False)
With Myfile
Do Until .AtEndOfStream
If intCount = 0 Then
If .ReadLine = "" Then
intCount = 1
End If
Else
strState = .ReadLine
If UCase(Left(strState, Len(strSubKey & "="))) = UCase(strSubKey & "=") Then
GetIni = Right(strState, Len(strState) - Len(strSubKey & "="))
End If
End If
Loop
.Close
End With
Set Myfile = Nothing
Set fso = Nothing
End Function


[ Last edited by 81291895 on 2007-12-5 at 10:12 PM ]
2 发表于 2007-12-05 21:24 ·  中国 浙江 杭州 联通
初级用户
积分 42
发帖 17
注册 2005-08-28 14:49
20年会员
UID 42027
状态 离线
没人会吗?
3 发表于 2007-12-05 21:31 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
问题是:要读取为这怎样的格式?
4 哈哈 发表于 2007-12-05 21:38 ·  中国 河南 郑州 联通
初级用户
积分 65
发帖 29
注册 2007-11-03 16:16
18年会员
UID 101592
性别 男
状态 离线
ini建议用API 要在VBS中调用,需要封装为OCX控件,然后用VBS调用

VBS自己好像只能把它当作文本文件读取......
5 发表于 2007-12-05 21:58 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
只要VBS把它读取出来,通过处理也可以使用,但是不明白要处理成怎样的方式运行(很少玩游戏了-_-|||)
6 发表于 2007-12-07 02:36 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
代码写的不错~而且很规范……


错在你找到了却没有及时退出。。。代码给你修改了,就加了个Exit Do

On Error Resume Next
Set
oShell = Wscript.CreateObject("Wscript.Shell")
Set objArgs = WScript.Arguments
For I = 0 To objArgs.Count - 1
Gamename = objArgs(I)
Next
SvcDir = GetIni (Gamename,"SvcDir","Gamecfg.ini")
DisDir = GetIni (Gamename,"DisDir","Gamecfg.ini")
RunDir = GetIni (Gamename,"RunDir","Gamecfg.ini")
RegDir = GetIni (Gamename,"RegDir","Gamecfg.ini")
RunCmd = GetIni (Gamename,"RunCmd","Gamecfg.ini")
Runfile = "Xxcopy " & SvcDir & " " & DisDir & " /pb/s/k/h/bi/yy/zy"
oShell.run Runfile,0,True
oShell.run RunCmd,0,True
oShell.run "Regedit /s RegDir",0,True
oShell.run RunDir

Function GetIni(strPrimary, strSubKey, strIniFilePath)
Dim fso, Myfile, intCount, strState
Set fso = CreateObject("Scripting.FileSystemObject")
Set Myfile = fso.OpenTextFile(strIniFilePath, 1, False, False)
With Myfile
Do Until .AtEndOfStream
If intCount = 0 Then
If .ReadLine
= "" & strPrimary & "]" Then
intCount = 1
End If
Else
strState = .ReadLine
If UCase
(Left(strState, Len(strSubKey & "="))) = UCase(strSubKey & "=") Then
GetIni = Right(strState, Len(strState) - Len(strSubKey & "="))
Exit Do
End If
End If
Loop
.Close
End With
Set
Myfile = Nothing
Set
fso = Nothing
End Function
论坛跳转: