Solved

VB Script to Read section of a file

Posted on 2014-03-16
5
562 Views
Last Modified: 2014-03-18
Hey guys,

I am using BGInfo.exe by SysInternals to display some information on my stations. I have a file located in the C:\Windows directory called station.ini. It contains the following:

[SETTINGS]
Program=C:\Path\App.exe
PCNum=25


I would like to write a VB script that would return the PCNum, in this case "25" or returned "Not Installed".

I have never written a VBS in my life and also not very familiar with BGInfo. Any help is appreciated. Thanks!
0
Comment
Question by:triphen
  • 3
5 Comments
 

Author Comment

by:triphen
ID: 39933299
OK after some research I found this:

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


WScript.Echo ReadIni("C:\WINDOWS\station.INI", "SETTINGS", "PCNum")

Open in new window



When running the .VBS file on my desktop, a message box pops up and says 25 as expected. However, when I load this VBS file into BGInfo it returns this error...


---------------------------
BGInfo
---------------------------
Error evaluating scripted field 'Test'
Microsoft VBScript runtime error
Line 76, position 0
Object required: 'WScript'
---------------------------
OK  
---------------------------
0
 
LVL 19

Accepted Solution

by:
Ken Butters earned 500 total points
ID: 39934490
After some googling... this seems to be the preferred way to go...

On Error Resume Next
      call WScript.Echo(strReturn)      'for cmd line
      call Echo(strReturn)      'for BGInfo
on error goto 0


When used insdie BGinfo the "Wscript" call will not work correctly.   When used on command line, the WScript is required... so the On error surrounding the two will allow both to be executed, and you should see the results of whichever one works depending upon how it is being run at the time.

So in your case... I'd try replacing :

WScript.Echo ReadIni("C:\WINDOWS\station.INI", "SETTINGS", "PCNum")

with this:

On Error Resume Next
      WScript.Echo ReadIni("C:\WINDOWS\station.INI", "SETTINGS", "PCNum")
      Echo ReadIni("C:\WINDOWS\station.INI", "SETTINGS", "PCNum")
on error goto 0
0
 

Author Closing Comment

by:triphen
ID: 39934519
SWEEET! Thank you sir!
0
 
LVL 43

Expert Comment

by:Steve Knight
ID: 39935058
BTW You can do a line or two of batch file (and quite a lot less VBS) if you want to, e.g.

@echo off
Set PCName=Not Installed
for /f "tokens=1*, delims==" %%a in (c:\windows\station.ini) do if "%%a"="PCName" SET PCName=%%~b
0
 

Author Comment

by:triphen
ID: 39938429
Thanks for that dragon-it!
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now