sandi81
Goto Top

Wie elemeniere von einer FOR-Variablen mit einem XML Tag Inhalt die Leerzeichen?

Hallo!
Ich habe folgendes Problemen:

Habe ein Batch-Script mit welchem ich eine XML-Datei auslese.

Sinn des Ganzen ist es, einen neuen XML-Tag in die XML-Datei hinzuzufügen.

Gut, die Vorgangsweise wäre diese:

1) Einlesen der vorhandenen XML-Datei
2) Ausgabe der eingelesenen Werte + des neuen Tags in eine Temporäre XML-Datei
3) Originale XML Datei löschen
4) Neue originale XML-Datei anlegen und mit Daten aus der Temp-Datei füllen
5) Temp-Datei löschen - fertig.

An und für sich funktioniert das auch ohne Probleme - leider nur beim ersten Mal face-sad

Denn es werden nach jedem Überschreiben am letzten Tag der XML-Datei Leerzeichen hinzugefügt, und das endet dann ab dem nochmaligen aufruf des Scripts darin, dass der neu hinzufügende Tag nicht mehr mitgegeben wird face-sad aber seht selbst:

....
:ModifyXML  
ECHO Read %file% and create temp file >> c:\acm.log
FOR /f "delims=;" %%f IN (%file%) DO (  

  IF "%%f" == "</projects>" (  
	ECHO ^<project name^="%xml_projectname%" type^="%xml_type%" config^="%xml_projectconfig%" app_pool^="%xml_apppool%" backupDays^="%xml_budays%" web_name^="%xml_webname%" /^> >> tmp_%file%  
  ) 
  ECHO %%f >> tmp_%file%
)
...

Das problem ist die If-Bedingung, besser gesagt die Variable %%f.

zum Schluss steht eben in dieser Variablen der Wert </projects> aber mit ein paar Leerzeichen folgend.

So was ich bis jetzt herausgefunden habe, gibt es leider keinen direkten Weg einfach die Leerzeichen am Ende der %%f Variablen zu elemenieren face-sad
Auch dass ich einfach die ersten 11 Zeichen von %%f nehme geht zumindest nach meiner Info nicht face-sad .. da ich ja %var:~11% nicht machen kann face-sad

Das Aufrufen eine Funktion mittel Call und dann den jeweiligen Wert übergeben, bringt auch Probleme, da der Wert der Variabeln eben </projects> und "<>" dann Probleme bereitet face-sad

Also, für Lösungsvorschläge wäre ich sehr dankbar!

LG
sandi81

[Edit Biber] Codefragment in Codefragment-Tags gesetzt. [/Edit]

Content-Key: 133950

Url: https://administrator.de/contentid/133950

Printed on: April 24, 2024 at 07:04 o'clock

Member: rubberman
rubberman Jan 20, 2010 at 15:37:27 (UTC)
Goto Top
Hallo sandi81,

wenn der Rest funktioniert, ist die Lösung einfach. Die Blanks vor > oder >> werden mit in die Datei übernommen. Also einfach entfernen. Alternativ kannst du die umgekehrte Schreibweise verwenden, á la
>>tmp_%file% ECHO %%f

Grüße
rubberman
Member: Biber
Biber Jan 20, 2010 at 15:48:17 (UTC)
Goto Top
Moin sandi81,

willkommen im Forum.
Wenn du Leerzeichen zwischen "Echo derEchotext" und dem Pipe-Symbol ">>" stehen lässt, werden die eben auch mit als "Text" angegesehen. und geECHOed.

Bei dir steht:
 ECHO %%f >> tmp_%file%
-- == unnötiges Leerzeichen als "_" dargestellt  
 ECHO %%f_>> tmp_%file% 
> Streiche das als "_" dargestellte Zeichen.

Wenn du den Batch halt 20x auf eine Textdatei anwendest und jedes mal in jeder Zeile ein unnötiges Leerzeichen beim gewollten Eins-zu-Eins-übertragen hinzukommt, dann hast du ziemlich schnell ein paar Leerzeichen zuviel.

Grüße
Biber
[edit] zu langsam... [/edit]
Member: sandi81
sandi81 Jan 21, 2010 at 08:50:41 (UTC)
Goto Top
VIELEN DANK!

Hat super geklappt!