标题: [问题求助] 【已解决】vbs怎么直接执行包含vbs代码的ini文件 [打印本页]
作者: raozhao2008 时间: 2015-11-7 11:28 标题: 【已解决】vbs怎么直接执行包含vbs代码的ini文件
本帖最后由 raozhao2008 于 2015-11-9 15:46 编辑
如题:vbs怎么直接执行包含vbs代码的ini文件?ini文件,顾名思义:它是个配置文件,里面全是用vbs格式设置的变量
现在我想用主vbs程序直接执行这个.ini,将变量传递给主程序(不知这样是否可行?),
请问各位大侠该怎么做?
- ’123.ini
- a=as
- av=1
- b=f
- bv=1
- df=dfc
- dfv=1
复制代码
作者: pcl_test 时间: 2015-11-7 11:46
- execute("a=123:b=345")
- msgbox a+b
复制代码
作者: raozhao2008 时间: 2015-11-7 13:46
回复 2# pcl_test
我想直接执行.ini文件,行吗
作者: pcl_test 时间: 2015-11-7 18:17
回复 3# raozhao2008
read and convert
作者: B魔方大人 时间: 2015-11-7 20:18
本帖最后由 B魔方大人 于 2015-11-7 20:20 编辑
ini文件改成自己,比如d:\a.ini- set f=creatobject("scripting.filesystemobject").opentextfile("ini文件",1)
- do until f.atendofstream
- redim preserve st(k)
- st(k)=f.readline:loop:f.close
- s=join(st,":")
- EXEcute(s)
- s="":f=""
复制代码
作者: yu2n 时间: 2015-11-8 23:07
本帖最后由 yu2n 于 2015-11-8 23:15 编辑
ini文件
http://baike.baidu.com/view/1296365.htm
文件扩展名
配置文件.ini
请注意:我们所讨论的是项目中的配置文件,它是整个项目共用的。所以它要有一个项目使用的文件名,其后缀是.ini。例如:端口配置.ini
格式
INI文件由节、键、值组成。
节
[section]
参数(键=值)
name=value
注解
注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。
; comment text
; INI文件的数据格式的例子(配置文件的内容)
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName21=value21
KeyName22=value22
其中:
[Section1 Name]用来表示一个段落。
因为INI文件可能是项目中共用的,所以使用[Section Name]段名来区分不同用途的参数区。例如:[Section1 Name]表示传感器灵敏度参数区;[Section2 Name]表示测量通道参数区等等。
KeyName1=value1 用来表示一个参数名和值。
比如:
7033=50
7034=51
其中:
7033表示某传感器名,50表示它的灵敏度值。
7034表示另一只传感器名,51表示它的灵敏度值。
实例
; exp ini file
[port]
portname=COM4
port=4
一个连“节”都没有的INI文件,也能叫INI文件?(“节”不可失!)
VBS 读写 INI 文件实例 1- 'Read & Write INI Files
- 'http://www.robvanderwoude.com/vbstech_files_ini.php#SampleScript
-
- WriteIni "test.ini", "TEST1", "My1stKey", "My1stValue"
- WriteIni "test.ini", "TEST2", "My1stKey", "My1stValue"
- WScript.Echo ReadIni( "test.ini", "TEST1", "My1stKey" )
- WriteIni "test.ini", "TEST1", "My1stKey", "My2ndValue"
- WScript.Echo ReadIni( "test.ini", "TEST1", "My1stKey" )
-
- 'DeleteINI
- 'To delete a key in an INI file, use WriteINI with a value "<DELETE_THIS_VALUE>".
-
- Function ReadIni( myFilePath, mySection, myKey )
- ' This function returns a value read from an INI file
- '
- ' Arguments:
- ' myFilePath [string] the (path and) file name of the INI file
- ' mySection [string] the section in the INI file to be searched
- ' myKey [string] the key whose value is to be returned
- '
- ' Returns:
- ' the [string] value for the specified key in the specified section
- '
- ' CAVEAT: Will return a space if key exists but value is blank
- '
- ' Written by Keith Lacelle
- ' Modified by Denis St-Pierre and Rob van der Woude
-
- Const ForReading = 1
- Const ForWriting = 2
- Const ForAppending = 8
-
- Dim intEqualPos
- Dim objFSO, objIniFile
- Dim strFilePath, strKey, strLeftString, strLine, strSection
-
- Set objFSO = CreateObject( "Scripting.FileSystemObject" )
-
- ReadIni = ""
- strFilePath = Trim( myFilePath )
- strSection = Trim( mySection )
- strKey = Trim( myKey )
-
- If objFSO.FileExists( strFilePath ) Then
- Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False )
- Do While objIniFile.AtEndOfStream = False
- strLine = Trim( objIniFile.ReadLine )
-
- ' Check if section is found in the current line
- If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
- strLine = Trim( objIniFile.ReadLine )
-
- ' Parse lines until the next section is reached
- Do While Left( strLine, 1 ) <> "["
- ' Find position of equal sign in the line
- intEqualPos = InStr( 1, strLine, "=", 1 )
- If intEqualPos > 0 Then
- strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
- ' Check if item is found in the current line
- If LCase( strLeftString ) = LCase( strKey ) Then
- ReadIni = Trim( Mid( strLine, intEqualPos + 1 ) )
- ' In case the item exists but value is blank
- If ReadIni = "" Then
- ReadIni = " "
- End If
- ' Abort loop when item is found
- Exit Do
- End If
- End If
-
- ' Abort if the end of the INI file is reached
- If objIniFile.AtEndOfStream Then Exit Do
-
- ' Continue with next line
- strLine = Trim( objIniFile.ReadLine )
- Loop
- Exit Do
- End If
- Loop
- objIniFile.Close
- Else
- WScript.Echo strFilePath & " doesn't exists. Exiting..."
- Wscript.Quit 1
- End If
- End Function
-
-
- Sub WriteIni( myFilePath, mySection, myKey, myValue )
- ' This subroutine writes a value to an INI file
- '
- ' Arguments:
- ' myFilePath [string] the (path and) file name of the INI file
- ' mySection [string] the section in the INI file to be searched
- ' myKey [string] the key whose value is to be written
- ' myValue [string] the value to be written (myKey will be
- ' deleted if myValue is <DELETE_THIS_VALUE>)
- '
- ' Returns:
- ' N/A
- '
- ' CAVEAT: WriteIni function needs ReadIni function to run
- '
- ' Written by Keith Lacelle
- ' Modified by Denis St-Pierre, Johan Pol and Rob van der Woude
-
- Const ForReading = 1
- Const ForWriting = 2
- Const ForAppending = 8
-
- Dim blnInSection, blnKeyExists, blnSectionExists, blnWritten
- Dim intEqualPos
- Dim objFSO, objNewIni, objOrgIni, wshShell
- Dim strFilePath, strFolderPath, strKey, strLeftString
- Dim strLine, strSection, strTempDir, strTempFile, strValue
-
- strFilePath = Trim( myFilePath )
- strSection = Trim( mySection )
- strKey = Trim( myKey )
- strValue = Trim( myValue )
-
- Set objFSO = CreateObject( "Scripting.FileSystemObject" )
- Set wshShell = CreateObject( "WScript.Shell" )
-
- strTempDir = wshShell.ExpandEnvironmentStrings( "%TEMP%" )
- strTempFile = objFSO.BuildPath( strTempDir, objFSO.GetTempName )
-
- Set objOrgIni = objFSO.OpenTextFile( strFilePath, ForReading, True )
- Set objNewIni = objFSO.CreateTextFile( strTempFile, False, False )
-
- blnInSection = False
- blnSectionExists = False
- ' Check if the specified key already exists
- blnKeyExists = ( ReadIni( strFilePath, strSection, strKey ) <> "" )
- blnWritten = False
-
- ' Check if path to INI file exists, quit if not
- 'strFolderPath = Mid( strFilePath, 1, InStrRev( strFilePath, "\" ) )
- 'If Not objFSO.FolderExists ( strFolderPath ) Then
- ' WScript.Echo "Error: WriteIni failed, folder path (" _
- ' & strFolderPath & ") to ini file " _
- ' & strFilePath & " not found!"
- ' Set objOrgIni = Nothing
- ' Set objNewIni = Nothing
- ' Set objFSO = Nothing
- ' WScript.Quit 1
- 'End If
-
- While objOrgIni.AtEndOfStream = False
- strLine = Trim( objOrgIni.ReadLine )
- If blnWritten = False Then
- If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
- blnSectionExists = True
- blnInSection = True
- ElseIf InStr( strLine, "[" ) = 1 Then
- blnInSection = False
- End If
- End If
-
- If blnInSection Then
- If blnKeyExists Then
- intEqualPos = InStr( 1, strLine, "=", vbTextCompare )
- If intEqualPos > 0 Then
- strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
- If LCase( strLeftString ) = LCase( strKey ) Then
- ' Only write the key if the value isn't empty
- ' Modification by Johan Pol
- If strValue <> "<DELETE_THIS_VALUE>" Then
- objNewIni.WriteLine strKey & "=" & strValue
- End If
- blnWritten = True
- blnInSection = False
- End If
- End If
- If Not blnWritten Then
- objNewIni.WriteLine strLine
- End If
- Else
- objNewIni.WriteLine strLine
- ' Only write the key if the value isn't empty
- ' Modification by Johan Pol
- If strValue <> "<DELETE_THIS_VALUE>" Then
- objNewIni.WriteLine strKey & "=" & strValue
- End If
- blnWritten = True
- blnInSection = False
- End If
- Else
- objNewIni.WriteLine strLine
- End If
- Wend
-
- If blnSectionExists = False Then ' section doesn't exist
- objNewIni.WriteLine
- objNewIni.WriteLine "[" & strSection & "]"
- ' Only write the key if the value isn't empty
- ' Modification by Johan Pol
- If strValue <> "<DELETE_THIS_VALUE>" Then
- objNewIni.WriteLine strKey & "=" & strValue
- End If
- End If
-
- objOrgIni.Close
- objNewIni.Close
-
- ' Delete old INI file
- objFSO.DeleteFile strFilePath, True
- ' Rename new INI file
- objFSO.MoveFile strTempFile, strFilePath
-
- Set objOrgIni = Nothing
- Set objNewIni = Nothing
- Set objFSO = Nothing
- Set wshShell = Nothing
- End Sub
复制代码
VBS 读写 INI 文件实例 2- 'Read and write windows INI files in VBSscriptMOTOBIT.COM
- 'http://www.motobit.com/tips/detpg_asp-vbs-read-write-ini-files/
-
- WriteINIString "Mail", "MAPI", "1", "win.ini" '写入INI
- WScript.echo GetINIString("Mail", "MAPI", "-", "win.ini") '读取INI
-
- Sub WriteINIStringVirtual(Section, KeyName, Value, FileName)
- WriteINIString Section, KeyName, Value, FileName
- End Sub
-
- Function GetINIStringVirtual(Section, KeyName, Default, FileName)
- GetINIStringVirtual = GetINIString(Section, KeyName, Default, FileName)
- End Function
-
- 'Work with INI files In VBS (ASP/WSH)
- 'v1.00
- '2003 Antonin Foller, PSTRUH Software, http://www.motobit.com
- 'Function GetINIString(Section, KeyName, Default, FileName)
- 'Sub WriteINIString(Section, KeyName, Value, FileName)
-
- Sub WriteINIString(Section, KeyName, Value, FileName)
- Dim INIContents, PosSection, PosEndSection
-
- 'Get contents of the INI file As a string
- INIContents = GetFile(FileName)
-
- 'Find section
- PosSection = InStr(1, INIContents, "[" & Section & "]", vbTextCompare)
- If PosSection>0 Then
- 'Section exists. Find end of section
- PosEndSection = InStr(PosSection, INIContents, vbCrLf & "[")
- '?Is this last section?
- If PosEndSection = 0 Then PosEndSection = Len(INIContents)+1
-
- 'Separate section contents
- Dim OldsContents, NewsContents, Line
- Dim sKeyName, Found
- OldsContents = Mid(INIContents, PosSection, PosEndSection - PosSection)
- OldsContents = split(OldsContents, vbCrLf)
-
- 'Temp variable To find a Key
- sKeyName = LCase(KeyName & "=")
-
- 'Enumerate section lines
- For Each Line In OldsContents
- If LCase(Left(Line, Len(sKeyName))) = sKeyName Then
- Line = KeyName & "=" & Value
- Found = True
- End If
- NewsContents = NewsContents & Line & vbCrLf
- Next
-
- If isempty(Found) Then
- 'key Not found - add it at the end of section
- NewsContents = NewsContents & KeyName & "=" & Value
- Else
- 'remove last vbCrLf - the vbCrLf is at PosEndSection
- NewsContents = Left(NewsContents, Len(NewsContents) - 2)
- End If
-
- 'Combine pre-section, new section And post-section data.
- INIContents = Left(INIContents, PosSection-1) & _
- NewsContents & Mid(INIContents, PosEndSection)
- else'if PosSection>0 Then
- 'Section Not found. Add section data at the end of file contents.
- If Right(INIContents, 2) <> vbCrLf And Len(INIContents)>0 Then
- INIContents = INIContents & vbCrLf
- End If
- INIContents = INIContents & "[" & Section & "]" & vbCrLf & _
- KeyName & "=" & Value
- end if'if PosSection>0 Then
- WriteFile FileName, INIContents
- End Sub
-
- Function GetINIString(Section, KeyName, Default, FileName)
- Dim INIContents, PosSection, PosEndSection, sContents, Value, Found
-
- 'Get contents of the INI file As a string
- INIContents = GetFile(FileName)
-
- 'Find section
- PosSection = InStr(1, INIContents, "[" & Section & "]", vbTextCompare)
- If PosSection>0 Then
- 'Section exists. Find end of section
- PosEndSection = InStr(PosSection, INIContents, vbCrLf & "[")
- '?Is this last section?
- If PosEndSection = 0 Then PosEndSection = Len(INIContents)+1
-
- 'Separate section contents
- sContents = Mid(INIContents, PosSection, PosEndSection - PosSection)
-
- If InStr(1, sContents, vbCrLf & KeyName & "=", vbTextCompare)>0 Then
- Found = True
- 'Separate value of a key.
- Value = SeparateField(sContents, vbCrLf & KeyName & "=", vbCrLf)
- End If
- End If
- If isempty(Found) Then Value = Default
- GetINIString = Value
- End Function
-
- 'Separates one field between sStart And sEnd
- Function SeparateField(ByVal sFrom, ByVal sStart, ByVal sEnd)
- Dim PosB: PosB = InStr(1, sFrom, sStart, 1)
- If PosB > 0 Then
- PosB = PosB + Len(sStart)
- Dim PosE: PosE = InStr(PosB, sFrom, sEnd, 1)
- If PosE = 0 Then PosE = InStr(PosB, sFrom, vbCrLf, 1)
- If PosE = 0 Then PosE = Len(sFrom) + 1
- SeparateField = Mid(sFrom, PosB, PosE - PosB)
- End If
- End Function
-
-
- 'File functions
- Function GetFile(ByVal FileName)
- Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")
- 'Go To windows folder If full path Not specified.
- 'If InStr(FileName, ":\") = 0 And Left (FileName,2)<>"\\" Then
- ' FileName = FS.GetSpecialFolder(0) & "\" & FileName
- 'End If
- On Error Resume Next
-
- GetFile = FS.OpenTextFile(FileName).ReadAll
- End Function
-
- Function WriteFile(ByVal FileName, ByVal Contents)
-
- Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")
- 'On Error Resume Next
-
- 'Go To windows folder If full path Not specified.
- 'If InStr(FileName, ":\") = 0 And Left (FileName,2)<>"\\" Then
- ' FileName = FS.GetSpecialFolder(0) & "\" & FileName
- 'End If
-
- Dim OutStream: Set OutStream = FS.OpenTextFile(FileName, 2, True)
- OutStream.Write Contents
- End Function
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |