Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Textteil mittel Batch ersetzen

Mitglied: HW-Schrauber

HW-Schrauber (Level 1) - Jetzt verbinden

31.01.2011, aktualisiert 14:51 Uhr, 4246 Aufrufe, 15 Kommentare

Hallo zusammen,

tüfftle seit geraumerzeit an einem kleineren Problem, das ich aber noch nicht gelöstbekommen habe.

Ich habe eine xml Datei mit folgendem Aufbau:

Inhalt der Datei Settings.xml
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>ghi</TAG3><TAG4>jkl</TAG4><Datei>Z:\www\xxx.yyy</Datei><TAG5>mno</TAG5>
<TAG4>jkl</TAG4><TAG2>def</TAG2><TAG1>abc</TAG1><TAG3>ghi</TAG3><TAG5>mno</TAG5><Datei>Z:\www\xxx.yyy</Datei>

Jede andere Mischung der Tags wäre auch noch denkbar.

Nun möchte ich, am liebsten mittels Batch (oder ggf auch VBS) die Daten zweier Tags ändern. Hier als Beispiel den Wert von <TAG3> und von <Datei> den neuen Wert, also ghi bzw. die Dateiangabe, möchte ich am Anfang das Batches angeben und am Ende des Batches möchte ich dann das verarbeitente Programm aufrufen.

IOch hatte auch schon den ein oder anderen Lösungsansatz, diese sind aber alle daran gescheitert, dass ich bei Verwendung des for /f Delims nur einzelne Zeichen aber keine Zeichenketten verwenden kann. Sprich, Sprich, wenn ich TAG3 eingeb dann teilt er ja sowohl nach T wie nach A wie nach G und nach 3. Das bringt mich also nicht weiter.

Hat jemand eine Idee?

LG, HW-Schrauber
Mitglied: bastla
31.01.2011 um 16:23 Uhr
Hallo HW-Schrauber!

Gerade XML / HTML mag ich per native Batch (wegen der Sonderzeichen "<" und ">") nicht soo gerne bearbeiten und greife lieber zu ein wenig (integriertem) VBS:
01.
@echo off & setlocal 
02.
set "Datei=D:\settings.xml" 
03.
 
04.
set  "Von1=<TAG3>ghi</TAG3>" 
05.
set "Nach1=<TAG3>lmn</TAG3>" 
06.
set  "Von2=<Datei>Z:\www\xxx.yyy</Datei>" 
07.
set "Nach2=<Datei>Z:\aaa\bbb.ccc</Datei> 
08.
 
09.
set "R=%temp%\Replacer.vbs" 
10.
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T = fso.OpenTextFile("%Datei%").ReadAll 
11.
>>%R% echo fso.CreateTextFile("%Datei%").Write Replace(Replace(T,"%Von1%","%Nach1%"),"%Von2%","%Nach2%") 
12.
cscript //nologo %R%
Die Zeile für das Starten des Bearbeitungsprogrammes muss ich (mangels Informationen darüber) Dir überlassen.

Grüße
bastla
Bitte warten ..
Mitglied: HW-Schrauber
31.01.2011 um 17:45 Uhr
Hallo bastla,

danke für deine schnelle Antwort. Habe das auch schon mal versucht umzusetzen. Habe dein Script (angepasst) auch schon mal so übernommen. Da ich mich mit VBS noch nicht so auskenne, habe ich dann den code in eine VBS-Datei gespeichert. Wenn ich dann die Datei mit Doppelklick starte, kommt eine Fehlermeldung mit Zeile1, Zeichen1 ungültiges Zeichen für VBScipt.

Dann habe ich mich vermutlich unklar ausgedrückt. Das was zu beginn zwischen den Tags steht, kenne ich nicht. Ich möchte also diesen mir unbekannetn Eintrag gegen einen von mir definierten Eintrag tauschen.

Und was den Programmaufruf anbetrifft wäre das im Batch einfach der Call %~dp0xxx.exe

Schön wäre noch, wenn die Verzeichnisangabe für die Datein wie im Batch mit %~dp0 wäre.

Dürfte ich dich noch mal um einen weiteren Anlauf bitten?

LG, HW-Schrauber
Bitte warten ..
Mitglied: Biber
31.01.2011 um 17:50 Uhr
Moin HW-Schrauber,

ist ein Missverständnis - bastla erzeugt ein temporäres VBScript... aber aus einer ganz harmlosen Batchdatei.

Speichere den Vielzeiler mit allen seinen Kommentaren unter der Endung ".cmd" oder "bat". statt mit der Endung .vbs.

Grüße
Biber
Bitte warten ..
Mitglied: 60730
31.01.2011 um 18:09 Uhr
Servus,

Dann habe ich mich vermutlich unklar ausgedrückt.
Das was zu beginn zwischen den Tags steht, kenne ich nicht.
Ich möchte also diesen mir unbekannetn Eintrag gegen einen von mir definierten Eintrag tauschen.

Da es sich um eine Batch handelt, die ein VBS erzeugt, wäre es doch sinnvoll und simpel, wenn du dir alle Zeilen (speziell zeile 4) genauer anschaust und evt. mit Hilfe einer Dosbox und dem Befehl set mit parameter /? mal nachschaust, was die eigentlich macht.

Es soll den Parameter /P geben mit dem könnte man einen allerdings müste der bekannt sein variablen Wert benennen der ausgetauscht werden soll.

btw:
Sprich, Sprich, wenn ich TAG3 eingeb dann teilt er ja sowohl nach T wie nach A wie nach G und nach 3. Das bringt mich also nicht weiter.
Und warum hast du dann nicht "<>" als delims definiert?

PS:
Dürfte ich dich noch mal um einen weiteren Anlauf bitten?
Mea culpa, aber nach der Bastlaschen und deiner Steilvorlage - genau dieses Thema hat der Bastla schon das eine oder andere mal gezimmert, das hätte man wirklich mit dem Produkt Forensuche finden können - hoffe ich dir keinen Einlauf sondern einen Ansatz, alleine weiterzukommen gegeben.

Gruß
Bitte warten ..
Mitglied: bastla
31.01.2011 um 18:35 Uhr
Hallo HW-Schrauber!
Dann habe ich mich vermutlich unklar ausgedrückt.
Ja; daher neuer Versuch (ist immer noch ein Batch ):
01.
@echo off & setlocal 
02.
set "Datei=%~dp0settings.xml" 
03.
 
04.
set  "Von1=<TAG3>.*</TAG3>" 
05.
set "Nach1=<TAG3>lmn</TAG3>" 
06.
set  "Von2=<Datei>.*</Datei>" 
07.
set "Nach2=<Datei>Z:\aaa\bbb.ccc</Datei>" 
08.
 
09.
set "R=%temp%\Replacer.vbs" 
10.
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:Set rE=New RegExp:rE.Global=True 
11.
>>%R% echo rE.Pattern="%Von1%":T=rE.Replace(T,"%Nach1%"):rE.Pattern="%Von2%":fso.CreateTextFile("%Datei%").Write rE.Replace(T,"%Nach2%") 
12.
cscript //nologo %R% 
13.
 
14.
%~dp0xxx.exe
Das vom Batch erzeugte VBScript führt zwei Ersetzungen mittels RegEx durch (deswegen auch die Schreibweise der jeweiligen "Von"-Angaben mit ".*" für "beliebige Werte"). Die Daten dafür werden "maßgeschneidert" in den Programmcode eingebaut. Zu beachten: Die "settings.xml" wird (ohne Sicherungskopie) durch die neue Fassung ersetzt.

BTW: Wozu soll eigentlich "call" beim Aufruf der "xxx.exe" gut sein?

Grüße
bastla
Bitte warten ..
Mitglied: HW-Schrauber
31.01.2011 um 18:36 Uhr
>>Danke Biber,

das hab ich verstanden und dann natürlich auch gleich umgesetzt. Dann komme ich aber wieder zu einem mir bereits bekannten Problem in der Zeile:

Set "vo1=<TAG3>...........

Hier kommt die Fehlermeldung: "<" kann syntaktisch an dieser Stelle nicht verarbeitet werden.


>>Hallo Timo,

<> als Delims weiß ich ja noch nicht wo denn der gewünschte Eintarg steht. Und wenn es so einfach ist, dann mach doch mal einen Vorschlag. Entweder zum Code, oder vielleicht zu einem Thema. Denn die Suche habe ich schon beschäftig aber mit den Antworten mein Problem nicht lösen können.

Die Textdatei hat nur eine Zeile aber bald an die hundert TAG Paare.

Und was den Ansatz mit set /P anbetrifft; genau da liegt ja das Problem. Ich habe z.B. <TAG2>def</TAG2>. Ich weiß, dass es Tag2 ist, aber ich weiß nicht was und wie lang der Eintrag (hier "def") ist. Er ist mir auch egal, da ich den Eintrag durch meine Vorgabe ersetzen will. Also, vorher <TAG2>???</TAG2> hinterher <TAG2>Beispiel</TAG2> oder <TAG2>irgendetwasanderes</TAG2>

LG, HW-Schrauber
Bitte warten ..
Mitglied: Biber
31.01.2011 um 18:41 Uhr
[OT] @bastla
Zitat von bastla:
BTW: Wozu soll eigentlich "call" beim Aufruf der "xxx.exe" gut sein?
[_] Ausbau der Vollbeschäftigung? Ankurbelung der 16-Kernel-Prozessoren-Entwicklung?
[_] Fehlende Kommentierung bleibt dadurch unbemerkt (Empfehlung von Houdini)
[_] Verwandte vom Land beeindrucken?
[_] ist eine alte Masche von Trickdieben - während die CMD.exe abgelenkt ist krabbelt ein Virus durch den Lüftungsschlitz.


Grüße auch an alle Günther J. Jauche dieser Welt.

Biber
[Edit] Re:@bastla
Wo ist eigentlich die Option mit der FDP geblieben?
Da oben stehen doch nur Antworten..... etwas, was für mich vorstellbar ist ....
Als FDP-Imitator oder gar Vordenker wäre ich ungeeignet ...*gg
[Edit]
[/OT]
Bitte warten ..
Mitglied: bastla
31.01.2011 um 18:47 Uhr
[OT] @Biber
Wie's aussieht geht ja Dein Montag auch schön langsam zu Ende ...

Wo ist eigentlich die Option mit der FDP geblieben?

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: HW-Schrauber
31.01.2011 um 18:53 Uhr
Sorry, dass mit dem Call sollte es etwas deutlicher machen.

Trotzdem hängt das ganze hier. Ich habe deinen Code genau 1:1 in eine Test.cmd eingefügt und ich erhalte folgende Meldung:

C:\Users\FRANZ-~1\AppData\Local\Temp\Replacer.vbs(1, 52) Laufzeitfehler in Micro
soft VBScript: Die Datei wurde nicht gefunden.
Bitte warten ..
Mitglied: Skyemugen
31.01.2011 um 19:02 Uhr
Aloha,

[OT]das Ganze war auch nur dazu da, deinen Namen herauszubekommen *lach*[/OT]

aber b²t:

Halbes batch, halbes vbs bääh, mach ich zwar auch gerne aber irgendwie wäre hier ein reines .vbs doch schöner anzusehen oder nicht, bastla? ;)

greetz André
Bitte warten ..
Mitglied: bastla
31.01.2011 um 19:03 Uhr
Hallo HW-Schrauber!

Und Du bist Dir ganz sicher, dass es im Ordner mit der Batch-Datei eine "settings.xml" gibt? Die wird nämlich an der in der Fehlermeldung genannten Position vom VBScript zu öffnen versucht.

Zu Testzwecken könntest Du ja in Zeile 2 nochmals einen absoluten Pfad schreiben ....

Grüße
bastla

[Edit] @Skyemugen
aber irgendwie wäre hier ein reines .vbs doch schöner anzusehen oder nicht, bastla? ;)
Letzteres - auch, weil ich noch nicht so recht wusste, was noch drangeschraubt werden sollte ...
[/Edit]
Bitte warten ..
Mitglied: Biber
31.01.2011 um 19:05 Uhr
Hmmm, HW-Schrauber,

ich frag mal ohne Kästchen (und alle Joker sind schon weg - Höchstens die D. Katzenbregen unter 11800 wäre erreichbar)...

Welche settings.xml hat den im Lauf der Schnipsel ihren Aufenthaltsort
von SET "Datei=D:\settings.xml"
nach set "Datei=%~dp0settings.xml" verlagert und könnte unauffindbar sein?

Grüße
Biber
Bitte warten ..
Mitglied: HW-Schrauber
31.01.2011 um 19:13 Uhr
Hallo bastla,

da hatte ich vergessen noch ein Unterverzeichnis einzufügen. Batch läuft fehlerfrei durch. Es ist auch eine Replace.vbs im temp Verzeiochnis. Aber geändert an der Datei hat sich nix. Auch wenn ich die VBS mit Doppelklick aufrufe, ändert sich nix. "settings.xml" ist nachher wie vorher.

LG, HW-Schrauber
Bitte warten ..
Mitglied: bastla
31.01.2011 um 19:23 Uhr
Hallo HW-Schrauber!

Tja, bei mir sähe das (mit Deinen Testdaten von oben) so aus:
Z:\TEMP>type settings.xml 
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>ghi</TAG3><TAG4>jkl</TAG4><Datei>Z:\www\xx 
x.yyy</Datei><TAG5>mno</TAG5> 
Z:\TEMP>replacer 
 
Z:\TEMP>type settings.xml 
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>lmn</TAG3><TAG4>jkl</TAG4><Datei>Z:\aaa\bb 
b.ccc</Datei><TAG5>mno</TAG5>
- allerdings nur, wenn die Schreibweise (inkl Groß-/Kleinschreibung) des Suchbegriffes (also etwa "<TAG3>") in Datei und Batch übereinstimmt ...

Wenn Du am Ende der Zeile 10 noch
:rE.IgnoreCase=True
hinzufügst, wird ein Unterschied in der Groß-/Kleinschreibung nicht berücksichtigt.

Grüße
bastla
Bitte warten ..
Mitglied: HW-Schrauber
31.01.2011 um 20:07 Uhr
Hallo bastla,

danke für deine Hilfe. Nun hat alles bestens geklappt. Hatte bei der ganzen Kopierei in der Batch irgendwann wieder falsche tags. Nun läufts aber wie gewünscht. Ich habe auch bereits noch eine Erweiterung auf eine dritte Ersetzung durchgeführt. Auch das klappt.

Also, DANK noch mal.

LG, HW-Schrauber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
XLXS zu CSV + Wert ersetzen - Batch
gelöst Frage von jochengBatch & Shell11 Kommentare

Hallo Leute ich habe ein Problem Ich brauch ein kleines Batch Script das ich täglich laufen lassen kann das ...

Batch & Shell
Tilde Zeichen per Batch ersetzen
gelöst Frage von Blackhawk386Batch & Shell6 Kommentare

Hi! Ich habe eine Datei in Textform, in der Umlaute per Batch umgewandelt werden müssen. Dazu habe ich hier ...

Batch & Shell
AD-Abfrage Attribute mittels Batch
gelöst Frage von goodbytesBatch & Shell2 Kommentare

Hallo, mittels dsquery.exe kann ich ja Abfragen an das AD senden. Die folgende Abfrage gibt mir die Standorte aller ...

Batch & Shell

Mittels Batch jede Zeile einer Textdatei prüfen

gelöst Frage von Peter32Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei (Projekte.txt), die etwa so aufgebaut ist Nun möchte ich gerne, dass ein Batch-Script jede ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 3 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 5 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 5 StundenMicrosoft3 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server-Hardware
Server für Exchange 2016, Kaufberatung
Frage von MazenauerServer-Hardware10 Kommentare

Guten Tag werte Gemeinde, Vorab: Ich dachte es gab mal einen separaten Bereich für solche Anfragen, habe ich leider ...