it_practice 10 Geschrieben 18. März 2008 Melden Teilen Geschrieben 18. März 2008 Hallo MCSE Boardianer Dies ist mein 1. Post. Lese schon seit einiger Zeit Beiträge von diesem Forum, und habe mich vor kurzem auch registriert. Nun komme ich leider zu meinem "Problem": Wir haben hier in der Firma eine Datei die einen bestimmten String hat, und jeden Tag mit einem Batch File geändert werden muss. Diese Datei hat eine für Windows unbekannte Dateiendung, jedoch kann man sie mit dem Editor öffnen da es eigentlich ein reines txt File ist. Nun zu meiner Aufgabe: Ich soll in dieser Datei einen bestimmten String suchen, ihn ändern, und am Schluss wieder speichern. Mein Ansatz ist, diese Datei temporär zu kopieren, in *.txt zu ändern, den string zu suchen, ändern, abspeichern, und wieder umbenennen und wieder ins richtige Verzeichnis kopieren. Die Batch Datei habe ich bis jetzt soweit fertig: copy D:\test.owp D:\temp\ cd temp rename test.owp test.txt findstr /C:"<Version>34</Version>" test.txt Nun muss ich eben die Zahl 34 einfach durch etwas anderes ersetzen, egal was. Es darf einfach nicht gleich sein. Und da ist die Stelle die ich nicht weiter weiss: Gibt es ein Batch Befehl, der einen String ersetzen kann, oder wie könnte ich das sonst lösen? Bin für jeden Tipp dankbar!!! Freundliche Grüsse aus der Schweiz, it_practice :) PS: Sorry, falls der Post zu lange ist... :( Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. März 2008 Melden Teilen Geschrieben 18. März 2008 Mit VB-Script könnte man es z.B. so machen (hab ich irgendwo im Internet beim googeln gefunden ;) ): varDatei="D:\test.owp" varSearch="<Version>34</Version>" varReplace="<Version>35</Version>" Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 Set f = MyFiles.OpenTextFile(varDatei, ForReading) Text = f.ReadAll Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write Replace(Text, varSearch, varReplace,1,-1,1) Die Variablen könnten auch als Übergabeparameter definiert werden und dann mit WScript.Arguments.Item(x) vorher ausgelesen werden (wobei x für den Parameter steht: 0 der erste, 1 der zweite...) Zitieren Link zu diesem Kommentar
it_practice 10 Geschrieben 19. März 2008 Autor Melden Teilen Geschrieben 19. März 2008 Hallo Cybquest Danke vielmals für deine Antwort... Leider bin ich nicht so gut im VB... :nene:, darum meine Frage: Das Script sollte jeden Tag eine andere Zahl haben, in diesem Fall: heute 34, morgen 35, übermorgen 36... weisst du da gerade die Lösung? Danke nochmals für die Antwort und den Ansatz... :) Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 19. März 2008 Melden Teilen Geschrieben 19. März 2008 Like this? Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="D:\test.owp" varCntDatei="D:\Counter.txt" Set f = MyFiles.OpenTextFile(varCntDatei, ForReading) varCount = f.ReadAll varCountNeu = varCount +1 Set f = MyFiles.OpenTextFile(varCntDatei, ForWriting, True) f.Write varCountNeu varSearch="<Version>" & varCount & "</Version>" varReplace="<Version>" & varCountNeu & "</Version>" Set f = MyFiles.OpenTextFile(varDatei, ForReading) Text = f.ReadAll Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write Replace(Text, varSearch, varReplace,1,-1,1) Hab einfach mal ne "counter.txt" angelegt. Dort steht am Anfang nur die erste zu suchende Zahl und wird dann immer um eins erhöht. Zitieren Link zu diesem Kommentar
it_practice 10 Geschrieben 19. März 2008 Autor Melden Teilen Geschrieben 19. März 2008 OK... danke vielmals... :jau::jau: wenn ich das jetzt richtig verstanden habe, muss ich deinen 1. Post in eine .vbs Datei schreiben und den 2. Post in die counter.txt? Oder bin ich auf dem Holzweg? :confused: Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 19. März 2008 Melden Teilen Geschrieben 19. März 2008 Falscher Holzweg... Der Inhalt der 2.ten Postings von Cybquest gehört in die vbs. Des Weiteren musst du eine Datei counter.txt anlegen, in der die Anfangszahl steht. Den Pfad zur counter.txt musst du dann natürlich bei dir noch anpassen. Zitieren Link zu diesem Kommentar
it_practice 10 Geschrieben 19. März 2008 Autor Melden Teilen Geschrieben 19. März 2008 hmmm, ist nicht gerade das, was ich wollte... das Script funktioniert, doch die Zahl wird im counter selbst erhöht, und nicht in der owp datei. OK nochmal: ich wollte die .owp datei temporär kopieren, in .txt umbenennen, damit ich sie bearbeiten kann. Dann sollte das Script den String suchen, und eben mit irgendetwas ersetzen (um eins erhöhen, aktuelles Datum...) und dann abspeichern. Dann wird die .txt datei wieder in .owp umgewandelt, und an die richtige Stelle kopiert. das temporäre kopieren, umbennen und wieder zurück kopieren ist kein Problem, das mache ich mit einer Batch Datei, aber eben den String auslesen und ändern weiss ich nicht, wie man das mit einem Script lösen kann. Sorry falls ich mein Problem nicht klar ausgedrückt habe... Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 19. März 2008 Melden Teilen Geschrieben 19. März 2008 Hmmm... bei mir funktioniert das Script. Es ändert halt direkt die OWP-Datei ohne den Umweg über txt. Also beim ersten Durchgang muss die Zahl in counter.txt identisch mit der Zahl in test.owp sein! Und in der counter.txt muss sie ohne Leerzeichen, ohne Zeilenumbuch danach o.ä. drin stehen! Sonst gehts nicht... Zitieren Link zu diesem Kommentar
it_practice 10 Geschrieben 19. März 2008 Autor Melden Teilen Geschrieben 19. März 2008 ach so... hab die counter.txt nochmal erstellt, ohne leerzeichen, zeilenumbruch, etc. und jetzt klappts! Danke vielmals Zitieren Link zu diesem Kommentar
it_practice 10 Geschrieben 11. April 2008 Autor Melden Teilen Geschrieben 11. April 2008 Hallo zusammen muss mich wieder melden, der Auftraggeber möchte eine Änderung am Script. Er möchte, dass das Script ohne diese Counter Datei funktioniert. Hab mich jetzt ein klein wenig mit dem Script auseinandergesetzt, jedoch kam ich nicht sehr weit. Ich hab es bereits zu Stande gebracht, dass er die Zahl aus der Originaldatei ausliest, und auch ersetzt, jedoch fällt dann der ganze Rest weg. So, dass am Schluss nur die ersetzte Zahl in der Datei steht, was mir nicht viel bringt. Hier mal mein aktueller Code: Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="U:\officeatwork_Script\michelgruppech.owp" Set f = MyFiles.OpenTextFile(varCntDatei, ForReading) varCount = f.ReadAll varCountNeu = varCount +1 Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write varCountNeu varSearch="<Version>" & varCount & "</Version>" varReplace="<Version>" & varCountNeu & "</Version>" Set f = MyFiles.OpenTextFile(varDatei, ForReading) Text = f.ReadAll Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write Replace(Text, varSearch, varReplace,1,-1,1) Vielen Dank schon im Voraus... Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 14. April 2008 Melden Teilen Geschrieben 14. April 2008 Nu ja... sooo geht das nicht! Du schreibts hier... Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write varCountNeu ja auch nur noch eine Zahl in deine Originaldatei! Hier ein funktionierendes Script. Bei jedem Aufruf wird die Zahl zwischen <Version> und </Version> erhöht: Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="C:\test.owp" Set f = MyFiles.OpenTextFile(varDatei, ForReading) Text = f.ReadAll varPos1 = Instr(Text,"<Version>")+9 varPos2 = Instr(Text,"</Version>") - varPos1 varCount = Mid(Text, varPos1, varPos2) varCountNeu = varCount + 1 varSearch="<Version>" & varCount & "</Version>" varReplace="<Version>" & varCountNeu & "</Version>" Set f = MyFiles.OpenTextFile(varDatei, ForWriting, True) f.Write Replace(Text, varSearch, varReplace,1,-1,1) ...die Variable "varDatei" natürlich wieder entsprechend anpassen ;) Zitieren Link zu diesem Kommentar
it_practice 10 Geschrieben 14. April 2008 Autor Melden Teilen Geschrieben 14. April 2008 OK... hatte mir gedacht, dass es so nicht ganz funktionieren kann :D Danke vielmals für deine Hilfe, es funktioniert... :):) 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.