bdeath
Goto Top

Vbscript - Konfig in ini-Datei auslagern

Hallo,
Ich habe mir ein kleines VBscript gepastelt, das mittels Robocopy Ordner von einem Netzlaufwerk auf die Festplatte kopiert.
Die Ordner die zu kopieren sind stehen in der Datei folder.txt


Das Script so wie es hier ist funktioniert soweit gut, nun möchte ich dies aber noch erweitern.
Dies sind meine ersten versuche mit VBscript, gibt es irgenwelche Fehler/ No Goes drin?

Am liebsten würde ich die Variblendefinition (strRobopath, strTargetRoot, strParameter) in eine ini-Datei auslagern am liebsten in mit den zu kopierenden Ordnern.
Habt ihr Vorschläge wie ich das am besten lösen könnte?
Die Ordner-Liste soll erweiterbar sein.


Option Explicit
Dim objFileSystem
Dim objFile
Dim objWshShell
Dim strConfigFile, strProgDir, strConfigName
Dim strLine, arrDirLine
Dim strRobopath, strSource, strTargetRoot, strTarget, strTargetDir, strParameter

Const DbQuote = """"  
Const ForReading = 1

'Variablen definieren  
strRobopath = "C:\Robo\robocopy.exe"  
strTargetRoot = "C:\Robo\biblio\"  
strParameter = "/mir /NDL /NFL /NJH /NJS"  
strConfigName = "folder.txt"  

'Aktuelles Verzeichnis auslesen  
Set strProgDir = CreateObject("WScript.Shell")  
strConfigFile = strProgDir.CurrentDirectory & "\" & strConfigName  

Set objWshShell = CreateObject("Wscript.Shell")  
Set objFileSystem = CreateObject("Scripting.FileSystemObject")  

'Config-Datei ermitteln  
If objFileSystem.FileExists(strConfigFile) Then

	'Config-Datei öffnen  
	Set objFile = objFileSystem.OpenTextFile(strConfigFile, ForReading, False)

'Config-Datei abarbeiten  
	do while not objFile.AtEndOfStream 
		strLine=objFile.Readline
		arrDirLine=Split(strLine,";")  
		strSource = arrDirLine(0)
		strTargetDir = arrDirLine(1)
		strSource = DbQuote & strSource & DbQuote
		strTarget = DbQuote & strTargetRoot & strTargetDir & DbQuote
		objWshShell.Run(strRobopath & " " & strSource &  " " & strTarget & " " & strParameter)  
	Loop
	objFile.Close

else	
	MsgBox "Die Config-Datei " & strConfigFile & " ist nicht vorhanden!", vbCritical, "Fehler"  
end if

folder.txt momentan
T:\biblio\VisioXP;VisioXP
T:\biblio\OfficeXP;OfficeXP

Content-Key: 101753

Url: https://administrator.de/contentid/101753

Printed on: April 23, 2024 at 11:04 o'clock

Member: bastla
bastla Nov 13, 2008 at 20:35:59 (UTC)
Goto Top
Hallo bdeath!

Vielleicht als Denkanstoß:
strVars = "#strRobopath#strTargetRoot#strParameter#strConfigName#"  
strParamFile = "C:\Params.txt"  

'Parameter festlegen  
strRobopath = "C:\Robo\robocopy.exe"   
strTargetRoot = "C:\Robo\biblio\"   
strParameter = "/mir /NDL /NFL /NJH /NJS"   
strConfigName = "C:\folder.txt"   

Set objWshShell = CreateObject("Wscript.Shell")   
Set objFileSystem = CreateObject("Scripting.FileSystemObject")  

'Parameter schreiben  
Set objParamFile = objFileSystem.CreateTextFile(strParamFile, True)
For Each Var In Split(strVars, "#")  
    If Trim(Var) <> "" Then  
        objParamFile.WriteLine Var & " = """ & Eval(Var) & """"  
    End If
Next
objParamFile.Close

'Demo Parameterdatei bearbeiten  
objWshShell.Run "notepad """ & strParamFile & """"  
WScript.Sleep 1000
MsgBox "Parameterdatei """ & strParamFile & """ wurde erstellt und kann vor dem erneuten Einlesen editiert werden." & vbCrLf & vbCrLf & _  
    "Bitte diese MessageBox erst nach dem Editieren schließen!", vbInformation, "Parameterdatei erstellt"  

'Parameter lesen  
For Each Var In Split(objFileSystem.OpenTextFile(strParamFile).ReadAll, vbCrLF)
    If InStr(Var, "=") > 0 Then If InStr(strVars, "#" & Trim(Left(Var, InStr(Var, "=") - 1)) & "#") > 0 Then Execute Var  
Next

'Parameter ausgeben  
Msg = ""  
For Each Var In Split(strVars, "#")  
    If Trim(Var) <> "" Then  
        Msg = Msg & Var & " = """ & Eval(Var) & """" & vbCrLF  
    End If
Next
WScript.Echo Msg

'Direkte Verwendung der Variablen  
WScript.Echo strRobopath & vbCrLF & strTargetRoot & vbCrLF & strParameter & vbCrLF & strConfigName
Variablendeklarationen sehe ich in VBScript nicht ganz so eng (die Unmöglichkeit, einen Typ für die Variable anzugeben, lässt mich vermuten, dass auch MS sie nicht ganz so ernst nimmt face-wink) - mit "Option Explicit" sind sie während der Testphase zwar recht nützlich, aber im fertigen Script kann ich dann auch gut darauf verzichten.

Grüße
bastla
Member: Biber
Biber Nov 14, 2008 at 08:17:16 (UTC)
Goto Top
<OT>
Moin bdeath und bastla,

Anmerkung:
auf M$-Systemen, wie sie bei MediaMarkt oder Saturn Hansa mit Werkseinstellungen verhökert werden, führt die Zeile 4
#Parameter festlegen
... zu einem Kompilierungsfehler.

Auf ungetuneten/ungepimpten Rechnern bitte ändern in
' Parameter festlegen

Grüße
Biber
</OT>
Member: bastla
bastla Nov 14, 2008 at 09:44:42 (UTC)
Goto Top
@Biber
auf M$-Systemen, wie sie bei MediaMarkt oder Saturn Hansa mit Werkseinstellungen verhökert werden
Wer wird denn wohl derartige Systeme verwenden? face-wink

Ist aber wohl trotzdem besser, wenn ich das auch oben etwas an den Mainstream anpasse ...

Grüße
bastla
Member: bdeath
bdeath Nov 14, 2008 at 10:15:33 (UTC)
Goto Top
Hallo,

ich habe mir das ungefähr so vorgestellt.
Das VbScript soll die variablen aus dem Config-File auslesen.
Der [Directories]-Teil soll dabei erweiterbar sein.

config.ini
[GeneralSettings]
Robopath="C:\Robo\robocopy.exe"  
Robopath="C:\Robo\robocopy.exe"   
Parameter="/mir /NDL /NFL /NJH /NJS"   
[Directories]
j1=T:\biblio\VisioXP;VisioXP
j2=T:\biblio\OfficeXP;OfficeXP
wenns einfacher ohne "j1" , "j2" ,... kann man die auch weglassen.

Ist dies irgenwie machbar und guter vbscript stil?