wuwu 10 Geschrieben 2. November 2006 Melden Teilen Geschrieben 2. November 2006 Hallo, bin in Sachen Script Programmierung ein absoluter Neuling deshalb die Frage: Ich möchte gerne per Batch Datei in jedem User Verzeichnis eine bestimmte Datei öffne und eine bestimmte Zeile dort in der Datei editieren. Dort gibt es einen Eintrag in der Datei Tempwar=33342, diese Zeile möchte ich dann auf Tempwar=33341 ändern! Kann mir da wer helfen? Bin soweit das ich in jedes Uerverzeichnis komme: for /F %%I in ('dir /ad /b M:\User') do ( copy D:\test.ini M:\User\%%I\all\test.ini ) pause Ich hoffe es kann mir wer helfen! Mfg & Danke Horst Zitieren Link zu diesem Kommentar
OnkelGauss 10 Geschrieben 2. November 2006 Melden Teilen Geschrieben 2. November 2006 Hallo wuwu Mit dem Tool "Batch Text Replacer Wizard" kann man in ASCII-Dateien Texte ersetzen lassen. Dieses Tool wird nicht mehr weiterentwickelt, ist aber unter Batch Text Replacer Wizard 2.2 zu finden. Ist zwar kein Batch, hilft aber evtl. auch weiter ,-> Zitieren Link zu diesem Kommentar
wuwu 10 Geschrieben 2. November 2006 Autor Melden Teilen Geschrieben 2. November 2006 tolles Tool, vielen Dank! Vielleicht hat ja für mich einer noch ein Beispiel, wie man es per Script löst? Mfg Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 2. November 2006 Melden Teilen Geschrieben 2. November 2006 tolles Tool, vielen Dank! Vielleicht hat ja für mich einer noch ein Beispiel, wie man es per Script löst? Mfg Hi, kann dir ein Skript schreiben, verstehe aber deine Verzeichnisstruktur nicht. Kannst du mir die nochmals erklären. Gruß woiza Zitieren Link zu diesem Kommentar
wuwu 10 Geschrieben 3. November 2006 Autor Melden Teilen Geschrieben 3. November 2006 Hallo woiza, M:\User\%%I\all\test.ini -> Userlaufwerke auf dem Server %%I = Usernamen In jedem Userverzeichnis ist ein Ornder all In diesem Ordner befindet sich die Datei z.B. test.ini und in der sollte ein Eintrag geändert werden: Von Tempwar=33342 auf Tempwar=33341 Ich hoffe ich habe es jetzt gut erklärt, Mfg & Danke Horst Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 3. November 2006 Melden Teilen Geschrieben 3. November 2006 So, kurz vor Feierabend noch die Antwort: Option Explicit dim objFS, objStartFolder, objUserFolder, UserFolder, objTargetFolder Dim objTargetFile, objFileStream, fileContent, arrLines, strLine Set objFS = CreateObject("Scripting.FileSystemObject") Set objStartFolder = objFS.GetFolder("c:\user") 'Die Userordner Meier, Müller... For Each UserFolder In objStartFolder.SubFolders 'Die Userordner als Objekt holen set objUserFolder = objFS.GetFolder(UserFolder.path) 'Den Unterordner All holen Set objTargetFolder = objFS.GetFolder(objUserFolder.SubFolders.item("all")) ' MsgBox objTargetFolder.Path 'Das File holen Set objTargetFile = objTargetFolder.Files.item("test.ini") 'Fileinhalt holen Set objFileStream = objTargetFile.OpenAsTextStream(1) fileContent = objFileStream.ReadAll objFileStream.Close 'Die Änderungen in die Datei schreiben Set objFileStream = objTargetFile.OpenAsTextStream(2) arrLines = Split(fileContent,vbNewLine) 'Schreibe die Zeichen zurück ins File For Each strLine In arrLines 'Wenn die Zeile mit tempwar beginnt, ändere sie If (Left(LCase(LTrim(strLine)),7) = "tempwar") Then strLine = "Tempwar=33341" End If 'Schreibe Zeile ins File objFileStream.WriteLine strLine Next objFileStream.Close Next Zitieren Link zu diesem Kommentar
zahni 562 Geschrieben 4. November 2006 Melden Teilen Geschrieben 4. November 2006 Für das Schreiben und Lesen von INI-Dateien gibt es in Windows eine API ( writeprofilestring usw.). Die kann man z.b. sehr einfach mit http://www.kixtart.org/index.asp nutzen. -Zahni Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 4. November 2006 Melden Teilen Geschrieben 4. November 2006 Für das Schreiben und Lesen von INI-Dateien gibt es in Windows eine API ( writeprofilestring usw.). Die kann man z.b. sehr einfach mit http://www.kixtart.org/index.asp nutzen. -Zahni Aber soweit ich weiß, ist kein vbs-Zugriff auf die Windows-API möglich. Gruß woiza Zitieren Link zu diesem Kommentar
wuwu 10 Geschrieben 6. November 2006 Autor Melden Teilen Geschrieben 6. November 2006 Hallo Woiza, vielen vielen Dank für das Script! Wie kann ich es jetzt starten? Mfg Horst Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 6. November 2006 Melden Teilen Geschrieben 6. November 2006 Speicher es als .vbs und mach nen Doppelkilck. Ansonsten csript.exe... Zitieren Link zu diesem Kommentar
wuwu 10 Geschrieben 6. November 2006 Autor Melden Teilen Geschrieben 6. November 2006 Hallo woiza, script ausgeführt, die Zeile wird aber leider nicht geändert, warum? Script gibt keine Fehlermeldung aus! Dateien sind alle im richtigen Verzeichnis! Datei Script habe ich auf .txt(.vbs) und test auch auf .txt(.ini) umbenannt. Mfg Horst Script.txt test.txt Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 6. November 2006 Melden Teilen Geschrieben 6. November 2006 Hi, du solltest schon die Ordner und Pfade im Script mit deiner Umgebung vergleichen. So habe ich z.B. c:\user als Startverzeichnis, weil ich für den Test kein m:\ zur Verfügung hatte. Zitieren Link zu diesem Kommentar
ReinerS 10 Geschrieben 6. November 2006 Melden Teilen Geschrieben 6. November 2006 So, kurz vor Feierabend noch die Antwort: Option Explicit ... 'Schreibe die Zeichen zurück ins File For Each strLine In arrLines 'Wenn die Zeile mit tempwar beginnt, ändere sie If (Left(LCase(LTrim(strLine)),7) = "tempwar") Then strLine = "Tempwar=33341" End If 'Schreibe Zeile ins File objFileStream.WriteLine strLine Next objFileStream.Close Next Hallo woiza, ich bin noch nicht so sattelfest in VBS, daher entschuldige wenn ich falsch liege, aber muß hinter die If (Left(LCase(LTrim..... End if nicht noch ein Exit For ? Wenn nicht, kannst Du dann erklären warum nicht? Grüße ReinerS Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 6. November 2006 Melden Teilen Geschrieben 6. November 2006 Hallo Reiner, nö muss nicht. ;) Zur Erklärung: Mit exit for breche ich die weitere Bearbeitung einer for...next oder einer for each...next ab. Das will ich aber ja nicht haben. In der for next wird der im Array arrLines befindliche Dateiinhalt wieder Zeile für Zeile in die Datei geschrieben. Dies ist die einfachste Möglichkeit, eine einzelne Zeile in einer Datei zu editieren. Das if in der Datei untersucht die jeweils aktuelle Zeile darauf, ob sie mit tempwar beginnt. Ist dies der Fall, wird sie geändert. Gruß woiza Zitieren Link zu diesem Kommentar
wuwu 10 Geschrieben 6. November 2006 Autor Melden Teilen Geschrieben 6. November 2006 Hi, du solltest schon die Ordner und Pfade im Script mit deiner Umgebung vergleichen. So habe ich z.B. c:\user als Startverzeichnis, weil ich für den Test kein m:\ zur Verfügung hatte. Hallo, wenn Du die Datei script.txt ansiehst, da habe ich jetzt d:temp reingeschrieben, auch zum testen. In diesem Verzeichnis steht folgendes drinnen: D:\Temp\Username\All\test.ini Wenn ich im Script die Messagebox ausgebe zeigt er mir die datei auch an! Warum schreibt er die Einträge in der Datei nicht? Mfg Horst Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.