Mit Vbs eine Stelle einer Datei auslesen und in ein anderes File einfügen
Hallo zusammen
Da ich wirklich sehr schwach bin in vbs -scripting, bzw. gar nichts kann, wende ich mich nun an euch.
So das Ziel ist eigentlich, eine Zeile aus einem .xml dokument, in ein anderes zu kopieren.
hört sich vllt einfach an aber:
Ich möchte gerne das via script der dateiname angegeben werden kann (ohne .xml zu schrieben), danach wird aus dieser .xml datei die Zeile, startend mit "<Device" und endend mit "/>" (ohne " " ...) in eine Datei kopiert , bzw nach einem "/>" in der Datei mit absatz geschrieben wird.
Weiss einer von euch weiter?
wäre sehr nett
Liebe Grüsse
edit: das kopierte sollte ebenfalls in ein XML File kopiert werden, dessen name aber konstant ist.
Da ich wirklich sehr schwach bin in vbs -scripting, bzw. gar nichts kann, wende ich mich nun an euch.
So das Ziel ist eigentlich, eine Zeile aus einem .xml dokument, in ein anderes zu kopieren.
hört sich vllt einfach an aber:
Ich möchte gerne das via script der dateiname angegeben werden kann (ohne .xml zu schrieben), danach wird aus dieser .xml datei die Zeile, startend mit "<Device" und endend mit "/>" (ohne " " ...) in eine Datei kopiert , bzw nach einem "/>" in der Datei mit absatz geschrieben wird.
Weiss einer von euch weiter?
wäre sehr nett
Liebe Grüsse
edit: das kopierte sollte ebenfalls in ein XML File kopiert werden, dessen name aber konstant ist.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113400
Url: https://administrator.de/forum/mit-vbs-eine-stelle-einer-datei-auslesen-und-in-ein-anderes-file-einfuegen-113400.html
Ausgedruckt am: 23.05.2025 um 22:05 Uhr
10 Kommentare
Neuester Kommentar
Hallo rdklieli und willkommen im Forum!
Grüße
bastla
die Zeile, startend mit "<Device" und endend mit "/>"
Es gibt genau eine Zeile, für welche diese Voraussetzungen zutreffen?in eine Datei kopiert , bzw nach einem "/>" in der Datei mit absatz geschrieben
Könntest Du kurz mit einem "Vorher"-"Nachher"-Vergleich der letzten paar Zeilen der Zieldatei (vorzugsweise in passender - "plain" bietet sich an) demonstrieren, wie das Ergebnis genau aussehen soll?Grüße
bastla
Hallo rdklieli!
Unter der Annahme, dass die Zeilen in der Zieldatei vor der Zeile
eingefügt werden sollen, etwa so:
Wie die Angabe der Quelldatei erfolgen soll, konnte ich aus Deiner Beschreibung nicht ganz genau herauslesen - daher in dieser Version als Kombination von vorgegebenem Basis-Pfad und Eingabe nur des Dateinamens ...
Die Zieldatei wird (ohne Erstellung einer Sicherungskopie) um die gefundenen Zeilen ergänzt (wobei vor jeder dieser Zeilen 2 TAB eingefügt sind - siehe Zeile 28).
Grüße
bastla
Unter der Annahme, dass die Zeilen in der Zieldatei vor der Zeile
</Computer>
Basis = "D:\XML_Files"
Beginn = "<Device"
Ende = "/>"
Ziel = "D:\Sammel.xml"
VorZeile = "</Computer>"
Set fso = CreateObject("Scripting.FileSystemObject")
Datei = InputBox("Bitte den Dateinamen (ohne .xml) eingeben!", "Dateiname")
Do While Right(Basis, 1) = "\" And Len(Basis) > 1
Basis = Left(Basis, Len(Basis) - 1)
Loop
Pfad = Basis & "\" & Datei & ".xml"
If Not fso.FileExists(Pfad) Then
WScript.Echo "Die Datei " & Pfad & " konnte nicht gefunden werden!"
WScript.Quit 1
End If
LBeginn = Len(Beginn)
Ausgabe = ""
Zeilen = Split(fso.OpenTextFile(Pfad).ReadAll, vbCrLF)
For Each Zeile In Zeilen
Von = InStr(Zeile, Beginn)
Bis = InStr(Zeile, Ende)
If Von * Bis > 0 And Bis - Von > LBeginn Then
Ausgabe = Ausgabe & vbTab & vbTab & Mid(Zeile, Von, Bis - Von + 2) & vbCrLF
End If
Next
T = Split(fso.OpenTextFile(Ziel).ReadAll, vbCrLF)
For i = 0 To UBound(T)
If InStr(T(i), VorZeile) > 0 Then
If i > 0 Then
Set Z = fso.CreateTextFile(Ziel)
For j = 0 To i - 1
Z.WriteLine T(j)
Next
Z.Write Ausgabe
For j = i To UBound(T)
Z.WriteLine T(j)
Next
Z.Close
Exit For
End If
End If
Next
Die Zieldatei wird (ohne Erstellung einer Sicherungskopie) um die gefundenen Zeilen ergänzt (wobei vor jeder dieser Zeilen 2 TAB eingefügt sind - siehe Zeile 28).
Grüße
bastla
Hallo rdklieli!
Vorweg: Mit Deinen beiden Testdateien klappt das bei mir ...
Es könnte an der Zeile 6 liegen - wenn in der Zieldatei die Schreibweise (auch Groß-/Kleinschreibung) nicht exakt übereinstimmt, wird aus Sicherheitsgründen auch nichts verändert.
Das Auslesen kannst Du durch Einfügen von
als Zeile 31 prüfen - es sollten alle gefundenen Zeilen (durch die 2 TAB eingerückt) ausgegeben werden.
Grüße
bastla
Vorweg: Mit Deinen beiden Testdateien klappt das bei mir ...
Es könnte an der Zeile 6 liegen - wenn in der Zieldatei die Schreibweise (auch Groß-/Kleinschreibung) nicht exakt übereinstimmt, wird aus Sicherheitsgründen auch nichts verändert.
Das Auslesen kannst Du durch Einfügen von
WScript.Echo Ausgabe
Grüße
bastla
Hallo rdklieli!
Könnten Deine Dateien im Unicode-Format vorliegen?
Falls dem so wäre, müsstest Du die Zeilen 23, 32 und 37 wie folgt abändern:
Ansonsten könntest Du noch
zwischen den Zeilen 26 und 27 einfügen und das Script von der Kommandozeile ("Start / Ausführen / CMD") durch die Eingabe
starten. Das Ergebnis sieht bei Deinen geposteten Testdaten (die Sterne habe ich entfernt, obwohl es damit auch ginge) so aus:
An der Zeile
ist zu erkennen, dass der erste Suchbegriff an Position 3 (davor sind nur 2 TAB) beginnt und der zweite Suchbegriff ("/>") an Position 26 zu finden ist. Nur wenn beide in einer Zeile enthalten sind (und "/>" hinter "<Device" liegt), wird diese Zeile verarbeitet.
Grüße
bastla
Könnten Deine Dateien im Unicode-Format vorliegen?
Falls dem so wäre, müsstest Du die Zeilen 23, 32 und 37 wie folgt abändern:
Zeilen = Split(fso.OpenTextFile(Pfad,1,True,True).ReadAll, vbCrLF)
T = Split(fso.OpenTextFile(Ziel,1,True,True).ReadAll, vbCrLF)
Set Z = fso.CreateTextFile(Ziel,True,True)
WScript.Echo Von,Bis,Zeile
cscript //nologo "D:\DasScript.vbs"
0 0 <?xml version="1.0"?>
0 0 <NetworkInfo version="X">
0 0 <Computer Name="local" Username="User" Status="Not Protected">
3 26 <Device text texttext" />
0 0 </Computer>
0 0 </NetworkInfo>
3 26 <Device text texttext" />
Grüße
bastla