Routine zum suchen von von Dateien und speichern deren Namen sowie Werte als Variablen für die weitere Verwendung
Hallo allerseits,
habe mich heue extra registriert, weil ich einfach nicht schnell genug weiterkomme. Bis jetzt konnte ich mit Hilfe der geposteten Beiträge mich sehr gut voran bewegen. Nun stehe ich vor einem Problem. Ich benötige ein VBS oder Batch Script für die folgende Aufgabe, am besten an einem Beispiel zu erläutern:
es gibt einen Verzeichnis D:\TXT. Hier liegen fünf txt-files
000111_D.txt
000113_C.txt
000234_A.txt
000456_B.txt
000832_A.txt
Der Inhalt dieser Dateien ist ein Wert, z.B. i.O oder n.i.O
In einem anderen Verzeichnis D:\XML liegen fünf xml-files:
000111_A_Part1.xml
000113_C_Part2.xml
000234_A_Product1.xml
000456_B_Product2.xml
000832_A_Part1.xml
Diese XML-Dateien beinhalten irgendwo einen Eintrag
<UserValue value="n.d." title="test_result"></UserValue>
Ich habe als Einstieg einen VBScript geschrieben, der eine festgelegte XML nach diesem Eintrag druchsucht und den Wert bei value=”n.d“ durch einen festgelegten Wert ersetzt.
Das Ziel ist es aber, dass ein Script in das Verzeichnis D:\TXT geht, die erste Datei öffnet und sich den Namen der Datei und den Inhalt (also als Variablen) merkt . Dann geht er in das D:\XML Verzeichnis, sucht eine XML, die den gleichen Namen (bzw. die ersten 8 Stellen sind identisch) hat wie die entsprechende txt-datei, und schreibt den gespeicherten Wert in das value=““ .
Das Script wird solange ausgeführt, bis er alle txt-dateien abgearbeitet hat.
Vielleicht hat einer von euch eine Idee, bin für jede Lösung dankbar.
habe mich heue extra registriert, weil ich einfach nicht schnell genug weiterkomme. Bis jetzt konnte ich mit Hilfe der geposteten Beiträge mich sehr gut voran bewegen. Nun stehe ich vor einem Problem. Ich benötige ein VBS oder Batch Script für die folgende Aufgabe, am besten an einem Beispiel zu erläutern:
es gibt einen Verzeichnis D:\TXT. Hier liegen fünf txt-files
000111_D.txt
000113_C.txt
000234_A.txt
000456_B.txt
000832_A.txt
Der Inhalt dieser Dateien ist ein Wert, z.B. i.O oder n.i.O
In einem anderen Verzeichnis D:\XML liegen fünf xml-files:
000111_A_Part1.xml
000113_C_Part2.xml
000234_A_Product1.xml
000456_B_Product2.xml
000832_A_Part1.xml
Diese XML-Dateien beinhalten irgendwo einen Eintrag
<UserValue value="n.d." title="test_result"></UserValue>
Ich habe als Einstieg einen VBScript geschrieben, der eine festgelegte XML nach diesem Eintrag druchsucht und den Wert bei value=”n.d“ durch einen festgelegten Wert ersetzt.
'Variablen initialisieren
Dim oldvalue
Dim newvalue
Dim newcontent
Dim content
'Variablen setzen
oldvalue = "value=" & _
Chr(34) & "n.d." & Chr(34) & _
" " & _
"title=" & _
Chr(34) & "test_result" & Chr(34)
newvalue = "value=" & _
Chr(34) & "i.o." & Chr(34) & _
" " & _
"title=" & _
Chr(34) & "test_result" & Chr(34)
'Datei öffnen und auslesen
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile("D:\XML\000093_A_Part1.xml", 1)
content = File.ReadAll
File.Close
'String finden und ersetzen
newcontent= Replace(content, oldvalue , newvalue)
'In Datei schreiben
Set File = FSO.OpenTextFile("D:\XML\000093_A_Part1.xml", 2)
File.Write newcontent
File.Close
Das Ziel ist es aber, dass ein Script in das Verzeichnis D:\TXT geht, die erste Datei öffnet und sich den Namen der Datei und den Inhalt (also als Variablen) merkt . Dann geht er in das D:\XML Verzeichnis, sucht eine XML, die den gleichen Namen (bzw. die ersten 8 Stellen sind identisch) hat wie die entsprechende txt-datei, und schreibt den gespeicherten Wert in das value=““ .
Das Script wird solange ausgeführt, bis er alle txt-dateien abgearbeitet hat.
Vielleicht hat einer von euch eine Idee, bin für jede Lösung dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183565
Url: https://administrator.de/forum/routine-zum-suchen-von-von-dateien-und-speichern-deren-namen-sowie-werte-als-variablen-fuer-die-weitere-183565.html
Ausgedruckt am: 16.05.2025 um 19:05 Uhr
9 Kommentare
Neuester Kommentar
Hmmm, warte doch noch einen Moment - heute war doch wieder bis 13:30h Streiktag bei der ver.di und es sind bestimmt noch nicht alle zurück vom Marktplatz.
Hallo Kame-hame-ha und ein etwas verspätetes Willkommen im Forum, hallo Biber!
Vor lauter Arbeit war ich noch nicht mal zum Streiken gekommen ...
Verstehe ich das richtig, dass die XML-Dateien nach dem sich aus der Textdatei ergebenden Beginn des Namens noch einen nicht bekannte Zusatz (wie "_Part1") enthalten?
Grüße
bastla
Vor lauter Arbeit war ich noch nicht mal zum Streiken gekommen ...
Verstehe ich das richtig, dass die XML-Dateien nach dem sich aus der Textdatei ergebenden Beginn des Namens noch einen nicht bekannte Zusatz (wie "_Part1") enthalten?
Grüße
bastla
Hallo Kame-hame-ha!
Dann brauchst Du 2 Schleifen - die erste, um alle Textdateien durchzuackern, und die zweite, um aus allen XML-Dateien die richtige herauszusuchen - ungetestet etwa so:
Grüße
bastla
[Edit] Zeile 13 - hoffentlich - richtig gestellt [/Edit]
Dann brauchst Du 2 Schleifen - die erste, um alle Textdateien durchzuackern, und die zweite, um aus allen XML-Dateien die richtige herauszusuchen - ungetestet etwa so:
TXTOrdner = "D:\TXT"
XMLOrdner = "D:\XML"
Alt = "<UserValue value=""n.d."" title=""test_result""></UserValue>"
Set fso = CreateObject("Scripting.FileSystemObject")
For Each TXT In fso.GetFolder(TXTOrdner).Files 'alle Textdateien durchgehen
TXTInhalt = TXT.OpenAsTextStream.ReadLine 'erste Zeile der Datei einlesen
Neu = Replace(Alt, "n.d.", TXTInhalt) 'gelesenen Wert in den Ersatz-String einbauen
TXTName = LCase(fso.GetBaseName(TXT.Name)) 'Dateinamen ohne Typ in Kleinbuchstaben erzeugen
LName = Len(TXTName) 'Länge des Namens nur einmal, daher vor der Schleife, ermitteln
For Each XML In fso.GetFolder(XMLDateien).Files 'alle XML-Dateien durchgehen
If LCase(Left(XML.Name, LName)) = TXTName Then 'Wenn der Anfang des Dateinamens mit dem Namen der Textdatei übereinstimmt ...
XMLInhalt = XML.OpenAsTextStream.ReadAll '... Dateiinhalt auslesen und ...
fso.CreateTextFile(XML.Path).Write Replace(XMLInhalt, Alt, Neu) '... mit ersetztem Text neue Datei erzeugen
Exit For 'Fertig - übrige XML-Dateien interessieren nicht mehr
End If
Next
Next
bastla
[Edit] Zeile 13 - hoffentlich - richtig gestellt [/Edit]
Hallo Kame-hame-ha!
Sorry - hab' das nur so auf die Schnelle hingeschrieben (Zeile 13 war mir dann aber wenigstens selbst noch aufgefallen) ...
Noch ein Tipp: Anstelle von
kannst Du auch
verwenden - Vorteil: Wenn Du aus einer CMD-Shell mit
testest, brauchst Du nicht jede Ausgbae mit OK zu bestätigen (und bei defaultmäßiger Ausführung über "
Grüße
bastla
Sorry - hab' das nur so auf die Schnelle hingeschrieben (Zeile 13 war mir dann aber wenigstens selbst noch aufgefallen) ...
Noch ein Tipp: Anstelle von
MsgBox Neu
WScript.Echo Neu
cscript Script.vbs
wscript
" wird trotzdem eine MsgBox verwendet) ...Grüße
bastla