Mit einer .bat eine XML Datei auslesen und umbenennen
Hallo liebe 'Administratoren'!
Ich brauche hilfe, da ich mich mit diesen Batch Dateien nicht gut auskenne. Ich bin für jede Hilfe extrem dankbar.
Ich hoffe, jemand kann mir ein Beispiel zeigen, wie man einfach ein XML mit einer Batch Datei umbenennen kann.
Die XML Datei hat das Format 123456.xml und liegt in einem Archivverzeichnis mit weiteren Dateien. Es handelt sich um ein Backup von einer Datenbank - alle Textdaten zum entsprechenden Titel sind im jeweiligen XML zu finden.
Da diese Nummer alleine nicht aussagekräftig ist, möchte ich den entsprechenden Tag im XML auslesen und an die Nummer hängen, also: 123456_buchtitel.xml
Und das ist schon alles.
Der Titel ist im Feld <title> gespeichert.
Als Erweiterung müsste allenfalls ein weiteres Feld an den Filenamen gehängt werden, also sowas wie:
123456_buchtitel_version.xml
Die Version ist auch hier im Feld <version> vorhanden.
Vielen Dank schon im Voraus für Eure Hilfe und Unterstützung.
dude
Die XML Datei hat das Format 123456.xml und liegt in einem Archivverzeichnis mit weiteren Dateien. Es handelt sich um ein Backup von einer Datenbank - alle Textdaten zum entsprechenden Titel sind im jeweiligen XML zu finden.
Da diese Nummer alleine nicht aussagekräftig ist, möchte ich den entsprechenden Tag im XML auslesen und an die Nummer hängen, also: 123456_buchtitel.xml
Und das ist schon alles.
Der Titel ist im Feld <title> gespeichert.
Als Erweiterung müsste allenfalls ein weiteres Feld an den Filenamen gehängt werden, also sowas wie:
123456_buchtitel_version.xml
Die Version ist auch hier im Feld <version> vorhanden.
Vielen Dank schon im Voraus für Eure Hilfe und Unterstützung.
dude
Please also mark the comments that contributed to the solution of the article
Content-Key: 196641
Url: https://administrator.de/contentid/196641
Printed on: May 7, 2024 at 22:05 o'clock
3 Comments
Latest comment
Hallo dudofski und willkommen im Forum!
Da Du kein Beispiel (zumindest der relevanten Zeilen) einer XML-Datei gepostet hast (falls Du das nachholen möchtest, verwende bitte "Code"-Formatierung dafür), nehme ich als unverbesserlicher Optimist an, dass jedes Feld in einer eigenen Zeile steht - dann könnte das etwa so gehen:
Wegen des "
Grüße
bastla
Da Du kein Beispiel (zumindest der relevanten Zeilen) einer XML-Datei gepostet hast (falls Du das nachholen möchtest, verwende bitte "Code"-Formatierung dafür), nehme ich als unverbesserlicher Optimist an, dass jedes Feld in einer eigenen Zeile steht - dann könnte das etwa so gehen:
@echo off & setlocal
set "Ordner=D:\XML-Archiv"
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b/a-d *.xml') do call :ProcessFile "%%i"
popd
pause
goto :eof
:ProcessFile
for /f "tokens=2 delims=<>" %%t in ('findstr "<title>" %1') do set "Titel=%%t"
for /f "tokens=2 delims=<>" %%v in ('findstr "<version>" %1') do set "Version=%%v"
echo ren %1 "%~n1_%Titel%_%Version%%~x1"
goto :eof
echo
" in Zeile 13 wird (zum Testen) das Umbenennen der Dateien nur durch Ausgabe des jeweiligen Befehles simuliert. Falls die Tags "<title>" und "<version>" nicht am Zeilenanfang stehen sondern eingerückt sind, wäre in den Zeilen 11 und 12 jeweils "tokens=3
" zu verwenden.Grüße
bastla
Hallo dudofski!
Auf Basis Deines Musters sollte die folgende Version des Unterprogramms "
Es wird jetzt vorausgesetzt, dass die Tags "<title>" bzw "<episode_number>" nicht am Zeilenanfang stehen, aber das erste/einzige Feld der jeweiligen Zeile kennzeichnen. Sollte eine der Informationen (vermutlich eher die "episode_number", wie auch im Beispiel) fehlen, wird sie (und das Trennzeichen "_") nicht in den neuen Namen einbezogen.
Wenn das Testergebnis vernünftig aussieht, einfach nur das "
Grüße
bastla
P.S.: Ging's nicht eigentlich um Bücher?
Auf Basis Deines Musters sollte die folgende Version des Unterprogramms "
:ProcessFile
" besser passen::ProcessFile
set "Titel=" & set "Episode="
for /f "tokens=3 delims=<>" %%t in ('findstr /i "<title>" %1^|findstr /iv "<title></title>"') do set "Titel=%%t"
for /f "tokens=3 delims=<>" %%e in ('findstr /i "<episode_number>" %1^|findstr /iv "<episode_number></episode_number>"') do set "Episode=%%e"
set "NameNeu=%~n1"
if defined Titel set "NameNeu=%NameNeu%_%Titel%"
if defined Episode set "NameNeu=%NameNeu%_%Episode%"
echo ren %1 "%NameNeu%%~x1"
goto :eof
Wenn das Testergebnis vernünftig aussieht, einfach nur das "
echo
" vor dem "ren
" entfernen und so den Batch "scharf" schalten ...Grüße
bastla
P.S.: Ging's nicht eigentlich um Bücher?