Startseite: Multimedia Blog > Admin > VB Script ini Dateien lesen und schreiben – Werte in Sektionen ändern

VB Script ini Dateien lesen und schreiben – Werte in Sektionen ändern

Parameter und Werte aus einer ini Datei auslesen. Neue Sektionen, Schlüssel und Werte in ini Datei schreiben. VB Script zum Auslesen einer ini Datei.

In einer ini Datei werden meist Konfigurationseinstellungen gespeichert. Die ini Dateien sind oft nach dem selben Muster aufgebaut. Es gibt eine Sektion (Section), einen Schlüssel (Key) und einen Wert (Value). Da der Aufbau fast immer gleich ist, können Einstellungen automatisch mit einem Script vorgenommen werden.

Bei großen ini Dateien ist es sehr vorteilhaft, bestimmte Werte mit einem Script auszulesen. Das erleichtert die Arbeit, geht schneller und die Fehleranfälligkeit ist geringer. Ein Tippfehler kann sich schnell einschleichen, wenn die Arbeit nicht konzentriert durchgeführt wird. Müssen viele Schlüssel und Werte in verschiedene ini Dateien geschrieben werden, würde ich diese Arbeit auch durch ein Script abarbeiten lassen.

Aufbau ini Datei

[Sektion1]
Schlüssel1=Wert1

[Sektion2]
Schlüssel2=Wert2

Beispiel
[Logfile]
Pfad=C:\Daten\Logfiles

ini Datei lesen und schreiben – VB Script

Im Internet habe ich ein VB Script gefunden, was uns die Arbeit sehr erleichtern kann. Es kann Werte aus ini Dateien auslesen und Sektionen, Schlüssel und Werte in eine oder mehrere ini Dateien schreiben. Bei dem Script muss eigentlich nicht viel angepasst werden. Ihr müsst nur den Pfad der ini Datei angeben und welcher Wert (Werte) ausgelesen werden soll. Beim Schreiben in eine ini Datei gebt ihr den Namen der ini Datei, die Sektion, den Schlüssel und den Wert an.

Was mir an dem VB Script sehr gut gefällt, dass das Script prüft, ob die Sektion schon vorhanden ist. Wenn ihr eine Sektion anlegen wollt, die es in der ini Datei schon gibt, werden die neuen Schlüssel und Werte innerhalb der vorhandenen Sektion angelegt. Die Daten werden nicht einfach blind an das Ende geschrieben.

Mit dem Befehl ReadIni („C:\Daten\logs.ini“, „logfiles“, „pfad“ ) wird aus der logs.ini Datei unter der Sektion logfiles der Wert vom pfad ausgelesen.

Die Syntax für den ReadIni Befehl lautet: ReadIni („Pfad und Name der ini Datei“, „Sektion“, „Schlüssel“ )

Es können auch mehrere Wert aus einer ini Datei ausgelesen werden. Auch aus unterschiedlichen Sektionen und Schlüsseln. Ein Beispiel würde so aussehen:

ReadIni („C:\Daten\logs.ini“, „logfiles“, „pfad“)
ReadIni („C:\Daten\logs.ini“, „logfiles“, „Status“)
ReadIni („C:\Daten\logs.ini“, „logfiles“, „Error“)
ReadIni („C:\Daten\logs.ini“, „Daten“, „textfile“)

Das Schreiben in eine ini Datei ist genauso aufgebaut. Mit dem Befehl für ein VB Script WriteIni („C:\Daten\logs.ini“, „logfiles“, „pfad“ , „C:\Windows\logs“) wird in der logs.ini Datei die Sektion logfiles, der Schlüssel pfad und der Wert C:\Windows\logs angelegt. Auch hier können wieder mehrere Sektionen, Werte und Schlüssel hintereinander angelegt werden.

WriteIni („C:\Daten\logs.ini“, „logfiles“, „pfad“,“C:\Daten\Logs“)
WriteIni („C:\Daten\logs.ini“, „logfiles“, „Status“,“Ok“)
WriteIni („C:\Daten\logs.ini“, „logfiles“, „Error“,“253″)
WriteIni („C:\Daten\logs.ini“, „Daten“, „textfile“,“komplett“)

Neue Schlüssel und Werte werden in einer vorhandenen Sektion ergänzt. Die Sektion wird nicht doppelt angelegt. Dieses Verhalten ist sehr gut. Eine Sektion mit gleichem Namen muss nicht doppelt in der ini Datei vorhanden sein. Das kann auch zu Fehlern führen.

#######################################################################################################

Option Explicit

WScript.Echo ReadIni („C:\Daten\logs.ini“, „logfiles“, „pfad“)
WScript.Echo ReadIni („C:\Daten\logs.ini“, „logfiles“, „Status“)
WScript.Echo ReadIni („C:\Daten\logs.ini“, „logfiles“, „Error“)
WScript.Echo ReadIni („C:\Daten\logs.ini“, „Daten“, „textfile“)
WriteIni („C:\Daten\logs.ini“, „logfiles“, „pfad“,“C:\Daten\Logs“)
WriteIni („C:\Daten\logs.ini“, „logfiles“, „Status“,“Ok“)
WriteIni („C:\Daten\logs.ini“, „logfiles“, „Error“,“253″)
WriteIni („C:\Daten\logs.ini“, „Daten“, „textfile“,“komplett“)

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 )

‚ 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 <> „“ 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 <> „“ 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 <> „“ 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.CopyFile strTempFile, strFilePath

Set objOrgIni = Nothing
Set objNewIni = Nothing
Set objFSO = Nothing
Set wshShell = Nothing
End Sub



Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.