123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- 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
- if strValue <> "" 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
- blnWritten = True
- blnInSection = False
- 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
- Dim path1,path2,sec,key
- path1 = "C:\RIDBMTReader\backup\tmp\conn.ini"
- path2 = "C:\RIDBMTReader\conn.ini"
- sec = "Config"
- key = "PORT"
- WriteIni path2, sec, key, ReadIni( path1, sec, key )
- key = "AutoOpenDir"
- WriteIni path2, sec, key, ReadIni( path1, sec, key )
- key = "FileName"
- WriteIni path2, sec, key, ReadIni( path1, sec, key )
- key = "ExportToFileByName"
- WriteIni path2, sec, key, ReadIni( path1, sec, key )
- key = "AllowSameFile"
- WriteIni path2, sec, key, ReadIni( path1, sec, key )
|