Mittels Batch bestimmte Information aus unbekannter Textdatei auslesen und in XML-Datei schreiben
Hallo,
es sind innerhalb eines Verzeichnisses sehr viele Unterordner vorhanden, in denen sich jeweils eine Textdatei befindet, deren Strukturen sich allerdings voneinander unterscheiden (es gibt keine eindeutige oder klar definierte Grammatik). In den Textdateien befindet sich allerdings eine Webadresse, die wie folgt aufgebaut ist: example.com/whatever/aa1234567/. Hier unterscheidet sich jeweils nur der letzte Teil ("aa1234567"), den ich gerne auslesen und in eine neue Textdatei mit eindeutiger Grammatik und immer gleichen Namen in den jeweiligen Unterordner schreiben möchte (XML). Falls die Webadresse gefunden und geschrieben worden ist, soll die unstrukturierte Textdatei gelöscht werden - anderenfalls nicht.
Beispiele:
TEXTFILE 1:
XML-File 1:
TEXTFILE 2:
XML-File 2:
usw. usf.
Danke & Gruß!
es sind innerhalb eines Verzeichnisses sehr viele Unterordner vorhanden, in denen sich jeweils eine Textdatei befindet, deren Strukturen sich allerdings voneinander unterscheiden (es gibt keine eindeutige oder klar definierte Grammatik). In den Textdateien befindet sich allerdings eine Webadresse, die wie folgt aufgebaut ist: example.com/whatever/aa1234567/. Hier unterscheidet sich jeweils nur der letzte Teil ("aa1234567"), den ich gerne auslesen und in eine neue Textdatei mit eindeutiger Grammatik und immer gleichen Namen in den jeweiligen Unterordner schreiben möchte (XML). Falls die Webadresse gefunden und geschrieben worden ist, soll die unstrukturierte Textdatei gelöscht werden - anderenfalls nicht.
Beispiele:
TEXTFILE 1:
some gabberish
content in no
particular order
...
mr jack loves onions. gnignigni. example.com/whatever/aa5463429/ who thought of this.
...
XML-File 1:
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<id>aa5463429</id>
</entry>
TEXTFILE 2:
...
...http://www.example.com/whatever/aa8167252/...
...
XML-File 2:
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<id>aa8167252</id>
</entry>
usw. usf.
Danke & Gruß!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 240434
Url: https://administrator.de/contentid/240434
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
3 Kommentare
Neuester Kommentar
!Achtung: Die Textdatei wird mit diesem Code tatsächlich gelöscht! Bitte nur bei Probematerial testen!
Moin,
unter der Annahme, dass die Textdatei immer gleich heißt:
Gruß
Moin,
unter der Annahme, dass die Textdatei immer gleich heißt:
@echo on
SETLOCAL enabledelayedexpansion
set xml=1.xml
set txt=1.txt
for /d %%i in (*) do (for /f "tokens=3 delims=/" %%a in ('findstr "example.com" %%i\*.txt') do set ganze_zeile="<?xml version="1.0" encoding="utf-8"?> <entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <id>%%a</id></entry>") && echo !ganze_zeile:~1,-2! >>%%i\%xml% && if exist %%i\%xml% del %%i\%txt%
Gruß
Hallo tardezyx!
Meine Interpretation Deiner Angabe würde etwa folgenden Ansatz ergeben:
Vorausgesetzt habe ich, dass der Link (zB "http://www.example.com/whatever/aa8167252/") immer mit "/" endet und keine Leerzeichen enthält, vom restlichen Text in der Zeile (so es solchen gibt) aber durch jeweils mindestens ein Leerzeichen getrennt ist.
Das Löschen der Textdatei ist derzeit noch nicht "scharf geschaltet" (siehe das "
Grüße
bastla
Meine Interpretation Deiner Angabe würde etwa folgenden Ansatz ergeben:
@echo off & setlocal
set "Basis=D:\Dein Verzeichnis mit den vielen Unterordnern"
set "Such=example.com"
pushd "%Basis%"
for /f "delims=" %%i in ('findstr /ims "%Such%" *.txt') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
for /f "delims=" %%a in ('findstr /i "%Such%" %1') do set "Zeile=%%a"
call set "String=%%Zeile:*%Such%=%%"
for /f %%a in ("%String%") do for %%w in ("%%a.") do set "Wert=%%~nxw"
if not defined Wert echo Wert in %1 nicht gefunden & goto :eof
set "xml=%~dpn1.xml"
(
echo ^<?xml version="1.0" encoding="utf-8"?^>
echo ^<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"^>
echo ^<id^>%Wert%^</id^>
echo ^</entry^>
)>"%xml%"
echo del %1
goto :eof
Das Löschen der Textdatei ist derzeit noch nicht "scharf geschaltet" (siehe das "
echo
" vor dem "del
"), sondern gibt den Löschbefehl zum Testen nur aus.Grüße
bastla