vbs - Eine ini Datei auslesen an dieser Stelle einen Pfad einfügen und wenn dieser Datei nicht existiert in der ini Pfad zusätzlich einfügen
Hallo zusammen,
da ich vbs Anfänger bin hätte ich eine Frage. Habe schon viele Programme hier gefunden doch keines hatte ich für meinen Gebrauch nutzen können.
Vielleicht könnte mir einer von euch helfen.
Möchte eine *.ini Datei auslesen nach dem wert names=
nach dem = möchte ich einen vorgegebenen Pfad einfügen.
Dies möchte ich auch mit der desktop6=
machen. Wenn dieser Wert nicht existiert soll er zusätzlich angelegt werden.
Dann habe ich noch folgendes Problem:
Ein Wert soll ausgelesen werden ... dies ist der Username der bei jeder Datei unterschiedlich ist.
Dieser wert soll dann in einen weiteren Pfad eingefügt werden.
Andere Werte wie z.B. Region=de sollten noch ausgelesen werden und wenn nicht vorhanden zusätzlich dazu geschrieben werden.
Vielleicht könnte mir jemand da weiterhelfen
Sasha
da ich vbs Anfänger bin hätte ich eine Frage. Habe schon viele Programme hier gefunden doch keines hatte ich für meinen Gebrauch nutzen können.
Vielleicht könnte mir einer von euch helfen.
Möchte eine *.ini Datei auslesen nach dem wert names=
nach dem = möchte ich einen vorgegebenen Pfad einfügen.
Dies möchte ich auch mit der desktop6=
machen. Wenn dieser Wert nicht existiert soll er zusätzlich angelegt werden.
Dann habe ich noch folgendes Problem:
Ein Wert soll ausgelesen werden ... dies ist der Username der bei jeder Datei unterschiedlich ist.
Dieser wert soll dann in einen weiteren Pfad eingefügt werden.
Andere Werte wie z.B. Region=de sollten noch ausgelesen werden und wenn nicht vorhanden zusätzlich dazu geschrieben werden.
Vielleicht könnte mir jemand da weiterhelfen
Sasha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 123909
Url: https://administrator.de/forum/vbs-eine-ini-datei-auslesen-an-dieser-stelle-einen-pfad-einfuegen-und-wenn-dieser-datei-nicht-existiert-in-123909.html
Ausgedruckt am: 21.04.2025 um 21:04 Uhr
12 Kommentare
Neuester Kommentar
Hallo tinything und willkommen im Forum,
könntest du bitte noch genauer beschreiben, wie deine ini-Datei aussieht?
Beisiel:
names=XXXX
desktop6=XXXXX
User=XXXXX
usw.
????
Sollen die neuen Daten in der gleichen Datei umgeschrieben werden oder soll im Anschluß eine neue ini-Datei kreeiert werden?
Zum öffnen von Dateien in VBS nimmst du das "Scripting.FileSystemObject".
Beispiel:
Zum einlesen/schreiben einer Datei in VBS geht folgendes:
zum austauschen von Daten kann man die "Replace"-Methode verwenden:
So, das sind erst mal ein paar Infos von meiner Seite her. Wenn du noch mehr Infos für uns hast, dann basteln wir dir was zurecht
Gruß
Tsuki
könntest du bitte noch genauer beschreiben, wie deine ini-Datei aussieht?
Beisiel:
names=XXXX
desktop6=XXXXX
User=XXXXX
usw.
????
Sollen die neuen Daten in der gleichen Datei umgeschrieben werden oder soll im Anschluß eine neue ini-Datei kreeiert werden?
Zum öffnen von Dateien in VBS nimmst du das "Scripting.FileSystemObject".
Beispiel:
Set FSO = CreateObject("Scripting.FileSystemObject")
Zum einlesen/schreiben einer Datei in VBS geht folgendes:
Set MyFile = FSO.OpenTextFile("D:\testfile.txt", 8)
MyFile.WriteLine (time)
' Art, wie die Datei geöffnet werden soll
'ForReading = 1
'ForWriting = 2
'ForAppending = 8
zum austauschen von Daten kann man die "Replace"-Methode verwenden:
' ";" durch Tab ersetzen
TextNeu = Replace(TextAlt, ";", vbTab)
So, das sind erst mal ein paar Infos von meiner Seite her. Wenn du noch mehr Infos für uns hast, dann basteln wir dir was zurecht
Gruß
Tsuki
hi,
also kurzes Beisiel:
Ini-Datei hat folgende Daten:
names=Testname
desktop6=desktop5
region=fr
path=
usw.
in meinem Schnipsel wird eine neue txt-Datei erstellt, welche fest angepasste Daten dann erhält:
ich weiß, daß du noch Daten anlegen möchtest. Das ist auch kein Problem. Möchte aber erst mal genau wissen, was im Detail tatsächlich passieren soll.
poste mal deinen Code
Gruß
Tsuki
also kurzes Beisiel:
Ini-Datei hat folgende Daten:
names=Testname
desktop6=desktop5
region=fr
path=
usw.
in meinem Schnipsel wird eine neue txt-Datei erstellt, welche fest angepasste Daten dann erhält:
Dim MeineIniDatei
dim Wert1 , Wert2
'On Error resume next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyDB = FSO.OpenTextFile("C:\Test.ini", 1)
Set MyNewDB = FSO.CreateTextFile("C:\TestIni.txt", TRUE)
MyNewDB.close
Do Until MyDB.AtEndOfStream
MeineIniDatei = MyDB.ReadLine
MeineIniDatei = Split(MeineIniDatei , "=")
Wert1 = MeineIniDatei(0)
Wert2 = MeineIniDatei(1)
select case Wert1
case "names"
if not Wert2 = "C:\User\" then Wert2 = "C:\User\"
case "desktop6"
if not Wert2 = "desktop6" then Wert2 = "desktop6"
case "region"
if not Wert2 = "de" then Wert2 = "de"
end select
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyNewDB = FSO.OpenTextFile("C:\TestIni.txt", 8)
MyNewDB.WriteLine (Wert1 & "=" & Wert2)
MyNewDB.close
Loop
MyDB.close
set MyDB = nothing
set MyNewDB = nothing
set FSO = nothing
ich weiß, daß du noch Daten anlegen möchtest. Das ist auch kein Problem. Möchte aber erst mal genau wissen, was im Detail tatsächlich passieren soll.
poste mal deinen Code
Gruß
Tsuki
Hi Tinything,
hatte etwas zu tun und auf die Schnelle nur diesen Script zusammen bekommen.
Du mußt natürlich die Pfade oder Dateinamen deinen Bedürfnissen anpassen
Beim schnellen Testen hatte es bei mir funktioniert (WinXP Pro Eng).
Sicher gibt es auch einfachere Varianten, aber die Zeit....
Sag mal bescheid, was nicht funktioniert!
Gruß
Tsuki
hatte etwas zu tun und auf die Schnelle nur diesen Script zusammen bekommen.
Du mußt natürlich die Pfade oder Dateinamen deinen Bedürfnissen anpassen
Beim schnellen Testen hatte es bei mir funktioniert (WinXP Pro Eng).
Sicher gibt es auch einfachere Varianten, aber die Zeit....
Dim MeineIniDatei
dim WertA(7)
dim WertB(7)
dim i
i = 0
dim Nutzer
'On Error resume next
'Usernamen auslesen (angemeldet am PC)
Set objUsr = CreateObject("WScript.NetWork")
Nutzer = objUsr.UserName
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyDB = FSO.OpenTextFile("C:\Test.ini", 1)
Do Until MyDB.AtEndOfStream
MeineIniDatei = MyDB.ReadLine
MeineIniDatei = Split(MeineIniDatei , "=")
WertA(i) = MeineIniDatei(0)
WertB(i) = MeineIniDatei(1)
select case WertA(i)
case "Directory"
if not WertB(i) = "C:\Programme\IBM\LN\Data" then WertB(i) = "C:\Programme\IBM\LN\Data"
case "Names"
if not WertB(i) = "H:\Documents\LN\Data\names.nsf" then WertB(i) = "H:\Documents\LN\Data\names.nsf"
case "Desktop6"
if not WertB(i) = "H:\Documents\LN\Data\Desktop6.ndk" then WertB(i) = "H:\Documents\LN\Data\Desktop6.ndk"
case "KeyFilename"
if not WertB(i) = "H:\Documents\LN\Data\" & Nutzer & ".id" then WertB(i) = "H:\Documents\LN\Data\" & Nutzer & ".id"
case "Region"
if not WertB(i) = "de" then WertB(i) = "de"
case "UserInterface"
if not WertB(i) = "de" then WertB(i) = "de"
case "ContentLanguage"
if not WertB(i) = "de" then WertB(i) = "de"
case "Cache"
if not WertB(i) = "C:\Temp\cache.ndk" then WertB(i) = "C:\Temp\cache.ndk"
end select
i = i + 1
Loop
MyDB.close
if not WertA(4) = "Region" then
WertA(4) = "Region"
WertB(4) = "de"
end if
if not WertA(5) = "UserInterface" then
WertA(5) = "UserInterface"
WertB(5) = "de"
end if
if not WertA(6) = "ContentLanguage" then
WertA(6) = "ContentLanguage"
WertB(6) = "de"
end if
if not WertA(7) = "Cache" then
WertA(7) = "Cache"
WertB(7) = "C:\Temp\cache.ndk"
end if
'jetzt Date überschreiben
Set MyNewDB = FSO.CreateTextFile("C:\Test.ini", TRUE)
MyNewDB.close
for i = 0 to 7
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyNewDB = FSO.OpenTextFile("C:\Test.ini", 8)
MyNewDB.WriteLine (WertA(i) & "=" & WertB(i))
MyNewDB.close
next
set MyDB = nothing
set MyNewDB = nothing
set FSO = nothing
Set objUsr = nothing
Sag mal bescheid, was nicht funktioniert!
Gruß
Tsuki
@TsukiSan
Kurzer Hinweis:
lässt sich schmerzfrei reduzieren auf
- wenn der gewünschte Wert schon vorhanden ist, schadet's ja nicht, ihn durch den selben Wert zu ersetzen ...
Grüße
bastla
Kurzer Hinweis:
if not WertB(i) = "C:\Programme\IBM\LN\Data" then WertB(i) = "C:\Programme\IBM\LN\Data"
WertB(i) = "C:\Programme\IBM\LN\Data"
Grüße
bastla
@bastla
Danke für deinen Hinweis!
Natürlich kann man das ganze noch etwas "kürzen", aber ich hatte auf die Schnelle nur die Vorgaben und Werte von Tinything übernommen und ihm einfach Zeile für Zeile zu zeigen, was ich meine.
Danke dir aber trotzdem, daß du dir die Zeit genommen hast, mal drüber zu schauen!!!!!!
Bei meinem Script muss die INI-Datei auch immer nach dem selben Muster gestrickt sein - also "Taylor-Made"
Gruß
Tsuki
Danke für deinen Hinweis!
Natürlich kann man das ganze noch etwas "kürzen", aber ich hatte auf die Schnelle nur die Vorgaben und Werte von Tinything übernommen und ihm einfach Zeile für Zeile zu zeigen, was ich meine.
Danke dir aber trotzdem, daß du dir die Zeit genommen hast, mal drüber zu schauen!!!!!!
Bei meinem Script muss die INI-Datei auch immer nach dem selben Muster gestrickt sein - also "Taylor-Made"
Gruß
Tsuki
@TsukiSan

Grüße
bastla
Bei meinem Script muss die INI-Datei auch immer nach dem selben Muster gestrickt sein - also "Taylor-Made" 
Wenn diese Voraussetzung erfüllt wäre, würde, da es ja anscheinend keine variablen Bestandteile gibt, ein einfaches Ersetzen der gesamten Datei durch die neue Version (also ein "copy") ja auch genügen ... Grüße
bastla
Hallo tinything!
Der Fehler resultiert daraus, dass Deine Datei mehr als die (vorgesehenen) 8 Zeilen Zeilen hat (siehe TsukiSans Anmerkung oben) ...
Ein etwas anderer Ansatz sähe so aus:
In dieser Variante wird eine Liste aller zu ändernden Zeilen (unter der Annahme, dass die Inhalte der eigentlich nur zu prüfenden Zeilen ab "Region=de" ebenfalls ersetzt werden dürfen - ansonsten müssten diese getrennt behandelt werden) erstellt und, nachdem die gesamte .ini-Datei in den Speicher eingelesen wurde, jeweils mit den vorhandenen Ini-Zeilen verglichen. Gibt es die Zeile schon, wird sie durch den neuen Inhalt ersetzt, ansonsten am Ende der Datei angefügt.
Grüße
bastla
Der Fehler resultiert daraus, dass Deine Datei mehr als die (vorgesehenen) 8 Zeilen Zeilen hat (siehe TsukiSans Anmerkung oben) ...
Ein etwas anderer Ansatz sähe so aus:
'Usernamen auslesen (angemeldet am PC)
Set objUsr = CreateObject("WScript.NetWork")
Nutzer = objUsr.UserName
MeineIniDatei = "C:\Test.ini"
'Alle benötigten Zeilen in einem Array zusammenfassen,
' um sie dann in einer Schleife einzeln bearbeiten zu können
Ersetzungen = Array( _
"Directory=C:\Programme\IBM\LN\Data", _
"Names=H:\Documents\LN\Data\names.nsf", _
"Desktop6=H:\Documents\LN\Data\Desktop6.ndk", _
"KeyFilename=H:\Documents\LN\Data\" & Nutzer & ".id", _
"Region=de", _
"UserInterface=de", _
"ContentLanguage=de", _
"Cache=C:\Temp\cache.ndk" _
)
Set fso = CreateObject("Scripting.FileSystemObject")
'Aktuellen Inhalt der .ini-Datei einlesen und zeilenweise
' in das Array Ini() schreiben
Ini = Split(fso.OpenTextFile(MeineIniDatei, 1).ReadAll, vbCrLF)
'Höchsten Index zwischenspeichern (wird mehrmals benötigt)
MaxZeile = UBound(Ini)
'Alle Zeilen der Ersetzungstabelle durchgehen
For Each Eintrag In Ersetzungen
Wert = Split(Eintrag, "=") 'Eintrag anhand des "=" aufteilen; Wert(0) = Schlüssel
Vorhanden = False 'Schalter, um festzuhalten, ob der Eintrag in der Ini vorhanden ist
For i = 0 To MaxZeile 'alle Zeilen der Ini durchgehen
'Ist Schlüssel + "=" in der Zeile enthalten?
If InStr(1, Ini(i), Wert(0) & "=", vbTextCompare) > 0 Then
Ini(i) = Eintrag 'gesamte Zeile durch Eintrag ersetzen
Vorhanden = True 'merken, dass Eintrag in der Ini vorhanden ist
Exit For 'die weiteren Zeilen der Ini müssen nicht mehr geprüft werden
End If
Next
'Falls der Eintrag noch nicht vorhanden ist,
' als "Zusatzzeile" zwischenspeichern (an bereits vorhandene
' Zusatzzeilen mit einer Zeilenschaltung vorweg anfügen)
If Not Vorhanden Then Zusatz = Zusatz & vbCrLF & Eintrag
Next
'Neuen Inhalt der Ini durch Zusammenfügen der bisherigen Zeilen
' und Anfügen der zusätzlichen Zeilen erstellen ...
InhaltNeu = Join(Ini, vbCrLF) & Zusatz
'... und damit die Originaldatei überschreiben
fso.CreateTextFile(MeineIniDatei, True).Write InhaltNeu
Grüße
bastla
@tinything
keine Ursache!
Bedanken müssen wir uns bei bastla!
Ich habe auch wieder gelernt und verstanden!
Gruß
Tsuki
keine Ursache!
Bedanken müssen wir uns bei bastla!
Ich habe auch wieder gelernt und verstanden!
Gruß
Tsuki