Jump to content

string abfragen und ändern


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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... :(

Link zu diesem Kommentar

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...)

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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...

Link zu diesem Kommentar
  • 4 Wochen später...

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...

Link zu diesem Kommentar

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 ;)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...