tnuis
tnuis

Reputation: 131

How to read variable data from .txt file?

  1. How do I get the script below to automatically read the 3 values marked with ???? from a .txt file?
  2. How would I code that in the code below?
  3. How would the .txt file have to look like? Please give me an example

Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim strFind
Dim strReplace
Dim strFolderPath

strFolderPath = ????
targetPath = strFolderPath

'Max number of times to replace string
strCount = 999'Comparison type: 0 = case sensitive, 1 = case insensitive
strCompare = 1

If targetPath = "" Then
  Wscript.Quit
End If

strFind = ????
If strFind = "" Then
  Wscript.Quit
End If

strReplace = ????

Set objFolder = objFSO.GetFolder(targetPath)

fileRename objFolder

Sub fileRename(folder)
  Do
    Wscript.sleep 10000

    'Loop through the files in the folder
    For Each objFile In folder.Files
      filename = objFile.Name
      ext = objFSO.getExtensionName(objFile)
      safename = Left(filename, Len(filename) - Len(ext) - 1)

      strStart = 1
      safename = Replace(safename, strFind,strReplace,strStart,strCount,strCompare)

      safename = trim(safename)

      On Error Resume Next

      'Terminate if filename stop.txt is found
      If filename="STOP.txt" Then
        result = MsgBox ("Are you sure you want to terminate the following VBScript?" & vbNewLine & vbNewLine & "FindAndReplace.vbs", vbOKCancel+vbSystemModal , "Terminate VBScript")

        Select Case result
        Case vbOK
          WScript.quit
          Case vbCancel
          MsgBox "FindAndReplace.vbs is still running in the background.",,"Information"
        End Select
      End If

      'Only rename if new name is different to original name
      If filename <> safename & "." & ext Then
        objFSO.MoveFile objFile.Path, objFile.ParentFolder.Path & "\" & safename & "." & ext
      End If

      If Err.Number <> 0 ThenWScript.Echo "Error renaming: " & filename.path & "Error: " & Err.Description
        Err.Clear
      End If
    Next
  Loop
End Sub

Upvotes: 0

Views: 6032

Answers (2)

tnuis
tnuis

Reputation: 131

Thank you Ansgar Weichers, that did the trick:) Again, the solution is often much easier than you would think.

For any reference to others this is the code that I ended up with:

Dim File
Set File = CreateObject("Scripting.FileSystemObject")
sScriptDir = File.GetParentFolderName(WScript.ScriptFullName) & "\Variables.ini"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set f = objFSO.OpenTextFile(sScriptDir)

Dim strFolderPath
Dim strFind 
Dim strReplace    

strFolderPath = f.ReadLine
strFind = f.Readline
strReplace = f.Readline


'strFolderPath = WScript.Arguments.Named("strfolderpath")
targetPath = strFolderPath

'Max number of times to replace string
strCount = 999
'Comparison type: 0 = case sensitive, 1 = case insensitive
strCompare = 1

If targetPath = "" Then
Wscript.Quit
End If

'strFind = WScript.Arguments.Named("strfind")

If strFind = "" Then
Wscript.Quit
End If

'strReplace = WScript.Arguments.Named("strreplace")


Set objFolder = objFSO.GetFolder(targetPath)


fileRename objFolder

Sub fileRename(folder)
Do

Wscript.sleep 10000

'Loop through the files in the folder
For Each objFile In folder.Files

filename = objFile.Name
ext = objFSO.getExtensionName(objFile)
safename = Left(filename, Len(filename) - Len(ext) - 1)

strStart = 1
safename = Replace(safename, strFind,strReplace,strStart,strCount,strCompare)

safename = trim(safename)

On Error Resume Next

'Terminate if filename stop.txt is found
If filename="STOP.txt" Then

result = MsgBox ("Are you sure you want to terminate the following VBScript?" & vbNewLine & vbNewLine & "FindAndReplace.vbs", vbOKCancel+vbSystemModal , "Terminate VBScript")

Select Case result
Case vbOK   
    WScript.quit
Case vbCancel
    MsgBox "FindAndReplace.vbs is still running in the background.",,"Information"
End Select
End If

'Only rename if new name is different to original name
If filename <> safename & "." & ext Then


objFSO.MoveFile objFile.Path, objFile.ParentFolder.Path & "\" & safename & "." & ext
End If

If Err.Number <> 0 Then
WScript.Echo "Error renaming: " & filename.path & "Error: " & Err.Description
Err.Clear
End If

Next

Loop

End Sub

The Variable.ini file simply contains 3 lines with the values for strFolderPath on line 1, strFind on line 2 and strReplace in line 3.

Again, thank you so much:)

Upvotes: 0

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200503

The simplest way would be a text file with 3 lines

foo
bar
baz

which could be read like this:

Set f = objFSO.OpenTextFile("C:\path\to\your.txt")

strFolderPath = f.ReadLine
strFind       = f.ReadLine
strReplace    = f.ReadLine

f.Close

Upvotes: 1

Related Questions