Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: tinything

tinything (Level 1) - Jetzt verbinden

01.09.2009, aktualisiert 07:57 Uhr, 11660 Aufrufe, 12 Kommentare

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
Mitglied: TsukiSan
01.09.2009 um 08:22 Uhr
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:
01.
Set FSO = CreateObject("Scripting.FileSystemObject")
Zum einlesen/schreiben einer Datei in VBS geht folgendes:
01.
 
02.
Set MyFile = FSO.OpenTextFile("D:\testfile.txt", 8) 
03.
MyFile.WriteLine (time) 
04.
 
05.
' Art, wie die Datei geöffnet werden soll 
06.
'ForReading   = 1  
07.
'ForWriting   = 2  
08.
'ForAppending = 8  
09.
 
zum austauschen von Daten kann man die "Replace"-Methode verwenden:
01.
' ";" durch Tab ersetzen 
02.
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
Bitte warten ..
Mitglied: tinything
01.09.2009 um 09:00 Uhr
Super genial wie schnell du mir geantwortet hast Vielen Dank schonmal dafür.

Die vorhandene ini Datei soll geändert werden. Eine neue ini erstellen ist nicht notwendig.

Die alte ini schaut folgendermassen aus:

Directory=C:\Programme\LN\Data
Names=names.nsf
Keyfilename=%USER%.id
Desktop6=

Region=de
UserInterface=de
ContentLanguage=de
Cache=C:\Temp\cache.ndk

Die neue soll dann so aussehen:

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\%USER%.id

Region=de <-Diese 4 Zeilen sollen nur überprüft werden ob vorhanden wenn nicht erstellen
UserInterface=de <-
ContentLanguage=de <-
Cache=C:\Temp\cache.ndk <-

Vielen vielen Dank schonmal !
Sitze schon Tage davor und komme einfach nicht weiter
Bitte warten ..
Mitglied: TsukiSan
01.09.2009 um 09:01 Uhr
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:
01.
Dim MeineIniDatei 
02.
dim Wert1 , Wert2 
03.
 
04.
'On Error resume next 
05.
 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
Set MyDB = FSO.OpenTextFile("C:\Test.ini", 1) 
08.
 
09.
Set MyNewDB = FSO.CreateTextFile("C:\TestIni.txt", TRUE) 
10.
MyNewDB.close 
11.
 
12.
Do Until MyDB.AtEndOfStream  
13.
     
14.
    MeineIniDatei = MyDB.ReadLine 
15.
    MeineIniDatei = Split(MeineIniDatei , "=") 
16.
	Wert1 = MeineIniDatei(0) 
17.
	Wert2 = MeineIniDatei(1) 
18.
	 
19.
	select case Wert1 
20.
	case "names" 
21.
	if not Wert2 = "C:\User\" then Wert2 = "C:\User\" 
22.
	case "desktop6" 
23.
	if not Wert2 = "desktop6" then Wert2 = "desktop6" 
24.
	case "region" 
25.
	if not Wert2 = "de" then Wert2 = "de" 
26.
	end select 
27.
	 
28.
	Set FSO = CreateObject("Scripting.FileSystemObject") 
29.
	Set MyNewDB = FSO.OpenTextFile("C:\TestIni.txt", 8) 
30.
		MyNewDB.WriteLine (Wert1 & "=" & Wert2) 
31.
	MyNewDB.close 
32.
 
33.
 
34.
Loop 
35.
 
36.
MyDB.close 
37.
 
38.
set MyDB = nothing 
39.
set MyNewDB = nothing 
40.
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
Bitte warten ..
Mitglied: TsukiSan
01.09.2009 um 09:02 Uhr
ah, warst schneller,

ich schaue mir deins mal an

Gruß
Tsuki
Bitte warten ..
Mitglied: TsukiSan
01.09.2009 um 09:41 Uhr
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....

01.
Dim MeineIniDatei 
02.
dim WertA(7) 
03.
dim WertB(7) 
04.
dim i 
05.
i = 0 
06.
dim Nutzer 
07.
 
08.
'On Error resume next 
09.
 
10.
'Usernamen auslesen (angemeldet am PC) 
11.
Set objUsr = CreateObject("WScript.NetWork")  
12.
Nutzer = objUsr.UserName 
13.
 
14.
 
15.
Set FSO = CreateObject("Scripting.FileSystemObject") 
16.
Set MyDB = FSO.OpenTextFile("C:\Test.ini", 1) 
17.
 
18.
 
19.
Do Until MyDB.AtEndOfStream  
20.
     
21.
    MeineIniDatei = MyDB.ReadLine 
22.
    MeineIniDatei = Split(MeineIniDatei , "=") 
23.
	WertA(i) = MeineIniDatei(0) 
24.
	WertB(i) = MeineIniDatei(1) 
25.
	 
26.
	select case WertA(i) 
27.
	case "Directory" 
28.
	if not WertB(i) = "C:\Programme\IBM\LN\Data" then WertB(i) = "C:\Programme\IBM\LN\Data" 
29.
	case "Names" 
30.
	if not WertB(i) = "H:\Documents\LN\Data\names.nsf" then WertB(i) = "H:\Documents\LN\Data\names.nsf" 
31.
	case "Desktop6" 
32.
	if not WertB(i) = "H:\Documents\LN\Data\Desktop6.ndk" then WertB(i) = "H:\Documents\LN\Data\Desktop6.ndk" 
33.
	case "KeyFilename" 
34.
	if not WertB(i) = "H:\Documents\LN\Data\" & Nutzer & ".id" then WertB(i) = "H:\Documents\LN\Data\" & Nutzer & ".id" 
35.
	case "Region" 
36.
	if not WertB(i) = "de" then WertB(i) = "de" 
37.
	case "UserInterface" 
38.
	if not WertB(i) = "de" then WertB(i) = "de" 
39.
	case "ContentLanguage" 
40.
	if not WertB(i) = "de" then WertB(i) = "de" 
41.
	case "Cache" 
42.
	if not WertB(i) = "C:\Temp\cache.ndk" then WertB(i) = "C:\Temp\cache.ndk" 
43.
	end select 
44.
	 
45.
	 
46.
	i = i + 1 
47.
 
48.
Loop 
49.
 
50.
MyDB.close 
51.
 
52.
	if not WertA(4) = "Region" then 
53.
		WertA(4) = "Region" 
54.
		WertB(4) = "de" 
55.
	end if 
56.
	if not WertA(5) = "UserInterface" then 
57.
		WertA(5) = "UserInterface" 
58.
		WertB(5) = "de" 
59.
	end if 
60.
	if not WertA(6) = "ContentLanguage" then 
61.
		WertA(6) = "ContentLanguage" 
62.
		WertB(6) = "de" 
63.
	end if 
64.
	if not WertA(7) = "Cache" then 
65.
		WertA(7) = "Cache" 
66.
		WertB(7) = "C:\Temp\cache.ndk" 
67.
	end if 
68.
 
69.
'jetzt Date überschreiben 
70.
	Set MyNewDB = FSO.CreateTextFile("C:\Test.ini", TRUE) 
71.
	MyNewDB.close 
72.
 
73.
for i = 0 to 7 
74.
	Set FSO = CreateObject("Scripting.FileSystemObject") 
75.
	Set MyNewDB = FSO.OpenTextFile("C:\Test.ini", 8) 
76.
		MyNewDB.WriteLine (WertA(i) & "=" & WertB(i)) 
77.
	MyNewDB.close 
78.
next 
79.
 
80.
set MyDB = nothing 
81.
set MyNewDB = nothing 
82.
set FSO = nothing 
83.
Set objUsr = nothing
Sag mal bescheid, was nicht funktioniert!

Gruß
Tsuki
Bitte warten ..
Mitglied: bastla
01.09.2009 um 09:51 Uhr
@TsukiSan
Kurzer Hinweis:
	if not WertB(i) = "C:\Programme\IBM\LN\Data" then WertB(i) = "C:\Programme\IBM\LN\Data"
lässt sich schmerzfrei reduzieren auf
	WertB(i) = "C:\Programme\IBM\LN\Data"
- wenn der gewünschte Wert schon vorhanden ist, schadet's ja nicht, ihn durch den selben Wert zu ersetzen ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
01.09.2009 um 09:57 Uhr
@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
Bitte warten ..
Mitglied: bastla
01.09.2009 um 10:34 Uhr
@TsukiSan
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
Bitte warten ..
Mitglied: tinything
01.09.2009 um 11:17 Uhr
Vielen lieben Dank für eure Unterstützung

Die ini Datei besteht aus mehreren Zeilen ausser die 8 die geändert werden müssen. deswegen das auslesen und ersetzten.

Habe jetzt alles fein säuberlich übernommen. Leider bekomme ich in Zeile: 24 Zeichen: 3 einen Fehler: Index außerhalb des gültigen Bereichs:´[number:1]´

könnt ihr mir da weiterhelfen? Oder habe ich was übersehen?
Bitte warten ..
Mitglied: bastla
01.09.2009 um 12:15 Uhr
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:
01.
'Usernamen auslesen (angemeldet am PC) 
02.
Set objUsr = CreateObject("WScript.NetWork")  
03.
Nutzer = objUsr.UserName 
04.
 
05.
MeineIniDatei = "C:\Test.ini" 
06.
'Alle benötigten Zeilen in einem Array zusammenfassen, 
07.
'  um sie dann in einer Schleife einzeln bearbeiten zu können 
08.
Ersetzungen = Array( _ 
09.
    "Directory=C:\Programme\IBM\LN\Data", _ 
10.
    "Names=H:\Documents\LN\Data\names.nsf", _ 
11.
    "Desktop6=H:\Documents\LN\Data\Desktop6.ndk", _ 
12.
    "KeyFilename=H:\Documents\LN\Data\" & Nutzer & ".id", _ 
13.
    "Region=de", _ 
14.
    "UserInterface=de", _ 
15.
    "ContentLanguage=de", _ 
16.
    "Cache=C:\Temp\cache.ndk" _ 
17.
18.
 
19.
Set fso = CreateObject("Scripting.FileSystemObject") 
20.
'Aktuellen Inhalt der .ini-Datei einlesen und zeilenweise 
21.
'    in das Array Ini() schreiben 
22.
Ini = Split(fso.OpenTextFile(MeineIniDatei, 1).ReadAll, vbCrLF) 
23.
'Höchsten Index zwischenspeichern (wird mehrmals benötigt) 
24.
MaxZeile = UBound(Ini) 
25.
 
26.
'Alle Zeilen der Ersetzungstabelle durchgehen 
27.
For Each Eintrag In Ersetzungen 
28.
    Wert = Split(Eintrag, "=") 'Eintrag anhand des "=" aufteilen; Wert(0) = Schlüssel 
29.
    Vorhanden = False 'Schalter, um festzuhalten, ob der Eintrag in der Ini vorhanden ist 
30.
    For i = 0 To MaxZeile 'alle Zeilen der Ini durchgehen 
31.
        'Ist Schlüssel + "=" in der Zeile enthalten? 
32.
	    If InStr(1, Ini(i), Wert(0) & "=", vbTextCompare) > 0 Then 
33.
            Ini(i) = Eintrag 'gesamte Zeile durch Eintrag ersetzen 
34.
            Vorhanden = True 'merken, dass Eintrag in der Ini vorhanden ist 
35.
            Exit For 'die weiteren Zeilen der Ini müssen nicht mehr geprüft werden 
36.
        End If 
37.
    Next 
38.
    'Falls der Eintrag noch nicht vorhanden ist, 
39.
    '  als "Zusatzzeile" zwischenspeichern (an bereits vorhandene 
40.
    '    Zusatzzeilen mit einer Zeilenschaltung vorweg anfügen) 
41.
    If Not Vorhanden Then Zusatz = Zusatz & vbCrLF & Eintrag 
42.
Next 
43.
 
44.
'Neuen Inhalt der Ini durch Zusammenfügen der bisherigen Zeilen 
45.
'  und Anfügen der zusätzlichen Zeilen erstellen ... 
46.
InhaltNeu = Join(Ini, vbCrLF) & Zusatz 
47.
 
48.
'... und damit die Originaldatei überschreiben 
49.
fso.CreateTextFile(MeineIniDatei, True).Write InhaltNeu
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
Bitte warten ..
Mitglied: tinything
01.09.2009 um 12:35 Uhr
Hallo bastla, Tsuki,

Vielen vielen Dank für eure Bemühungen. Das Programm funktioniert jetzt einwandfrei

Genau so hab ich mir das vorgestellt wie kann ich das je wieder gutmachen ...

Vielen Vielen Dank nochmal !!!
Bitte warten ..
Mitglied: TsukiSan
01.09.2009 um 15:48 Uhr
@tinything

keine Ursache!
Bedanken müssen wir uns bei bastla!
Ich habe auch wieder gelernt und verstanden!

Gruß
Tsuki
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...