Created
December 16, 2014 11:25
-
-
Save Grimthorr/e7e39c0427ab09f65a92 to your computer and use it in GitHub Desktop.
Visual Basic script function to write a key to an INI file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment