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 Mittels Batch bestimmte Information aus unbekannter Textdatei auslesen und in XML-Datei schreiben

Mitglied: tardezyx

tardezyx (Level 1) - Jetzt verbinden

09.06.2014, aktualisiert 21:31 Uhr, 2193 Aufrufe, 3 Kommentare, 1 Danke

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:

01.
some gabberish 
02.
content in no 
03.
particular order 
04.
... 
05.
mr jack loves onions. gnignigni. example.com/whatever/aa5463429/ who thought of this. 
06.
...
XML-File 1:

01.
<?xml version="1.0" encoding="utf-8"?> 
02.
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
03.
  <id>aa5463429</id> 
04.
</entry>
TEXTFILE 2:

01.
... 
02.
...http://www.example.com/whatever/aa8167252/... 
03.
...
XML-File 2:

01.
<?xml version="1.0" encoding="utf-8"?> 
02.
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
03.
  <id>aa8167252</id> 
04.
</entry>
usw. usf.

Danke & Gruß!
Mitglied: Xaero1982
09.06.2014, aktualisiert um 10:07 Uhr
!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:

01.
@echo on 
02.
SETLOCAL enabledelayedexpansion 
03.
 
04.
set xml=1.xml 
05.
set txt=1.txt 
06.
 
07.
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% 
08.
 
Gruß
Bitte warten ..
Mitglied: bastla
LÖSUNG 09.06.2014, aktualisiert um 21:31 Uhr
Hallo tardezyx!

Meine Interpretation Deiner Angabe würde etwa folgenden Ansatz ergeben:
01.
@echo off & setlocal 
02.
set "Basis=D:\Dein Verzeichnis mit den vielen Unterordnern" 
03.
set "Such=example.com" 
04.
 
05.
pushd "%Basis%" 
06.
for /f "delims=" %%i in ('findstr /ims "%Such%" *.txt') do call :ProcessFile "%%i" 
07.
popd 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
for /f "delims=" %%a in ('findstr /i "%Such%" %1') do set "Zeile=%%a" 
12.
call set "String=%%Zeile:*%Such%=%%" 
13.
for /f %%a in ("%String%") do for %%w in ("%%a.") do set "Wert=%%~nxw" 
14.
if not defined Wert echo Wert in %1 nicht gefunden & goto :eof 
15.
set "xml=%~dpn1.xml" 
16.
17.
    echo ^<?xml version="1.0" encoding="utf-8"?^> 
18.
    echo ^<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"^> 
19.
    echo   ^<id^>%Wert%^</id^> 
20.
    echo ^</entry^> 
21.
)>"%xml%" 
22.
echo del %1 
23.
goto :eof
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 "echo" vor dem "del"), sondern gibt den Löschbefehl zum Testen nur aus.

Grüße
bastla
Bitte warten ..
Mitglied: tardezyx
09.06.2014 um 18:11 Uhr
Danke euch beiden.

@Xaero1982: Deine Lösung holt zwar die korrekte Information, aber das Erzeugen der XML und das Löschen funktioniert nicht ganz so korrekt wie bei der Lösung von bastla, da bei dir auch alle anderen Dateien in dem Unterordner gelöscht werden (wieso auch immer) und die Zeilenumbrüche nicht ganz hinhauen.

@bastla: Bei deiner Lösung wird beim Finden der Information direkt die Quelldatei mit den XML-Daten gefüllt und überschrieben. Ein Löschen ist hier also nicht mehr notwendig. Das finde ich noch eleganter als zwei Dateien zu haben und dann eine zu löschen.

Ich habe dahingehend noch eine Zusatzfrage. Mit einem Drittprogramm werden anhand der ermittelten ID weitere Informationen in die XML geschrieben, von denen ich <title> und <year> gerne zum Umbenennen des Unterordners und aller dort vorhandenen Dateien nutzen möchte (Dateiendungen sind immer unique - es ist also kein Problem, sie gleich zu benennen). Derzeit mache ich das mühsam manuell.

Beispiel:

01.
Suchverzeichnis 
02.
- Subdir 1 
03.
--- Subfile 1.* (Datendatei, Dateityp unbekannt/unwichtig) 
04.
--- Subfile 1.nfo (die XML) 
05.
- Subdir 2 
06.
--- Subfile 2.* (Datendatei, Dateityp unbekannt/unwichtig) 
07.
--- Subfile 2.nfo (die XML) 
08.
- usw. usf.
Subfile 1.nfo enthält nun folgende Informationen:

01.
<?xml version="1.0" encoding="utf-8"?> 
02.
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
03.
  <id>tt1276962</id> 
04.
  <title>Projekt ASDF</title> 
05.
... 
06.
  <year>2005</year> 
07.
... 
08.
</entry>
Es soll daraufhin wie folgt umbenannt werden:

01.
Suchverzeichnis 
02.
- Projekt ASDF (2005) 
03.
--- Projekt ASDF (2005).* (Datendatei, Dateityp unbekannt/unwichtig) 
04.
--- Projekt ASDF (2005).nfo (die XML) 
05.
- Subdir 2 
06.
--- Subfile 2.* (Datendatei, Dateityp unbekannt/unwichtig) 
07.
--- Subfile 2.nfo (die XML) 
08.
- usw. usf.
Es sollen also <title> und <year> zu einem String verknüpft und dabei <year> umklammert werden. Hinzu kommt aber eine Besonderheit durch die Ordner- & Dateinamensbeschränkung, bei der bestimmte Zeichen nicht erlaubt sind. Diese Zeichen kommen freilich nur im <title> vor und müssten im String wie folgt ersetzt werden:

- "<" mit "("
- ">" mit ")"
- "/" mit "-"
- "|" mit "-"
- "\" mit "-"
- ":" mit " -" (inkl. Leerzeichen vor dem "-")
- "*" mit "" (also weg)
- "?" mit "" (also weg)

Ferner können (bei einer späteren Nachpflege) in den Unterordnern die folgenden drei Dateien mit bestimmten Endungen vorkommen, dies wären:

Projekt ASDF (2005)-farufl.*
Projekt ASDF (2005)-postiori.*
Projekt ASDF (2005)-tralarus.*

Diese Endungen müssten bei der Umbenennung erhalten bleiben.

Danke nochmal und Gruß!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Bestimmte Zeile einer Textdatei mit Batch auslesen

gelöst Frage von PinkFLuffyUnicornBatch & Shell2 Kommentare

Hi, ich habe ein kleines Batch Script, welches mir den Status der Firewall ausgeben soll(ob an oder aus) der ...

Batch & Shell

Batch - Ordnerstruktur bis bestimmte Anzahl von Unterverzeichnisse auslesen und in Textdatei schreiben

gelöst Frage von BlattlausOGBatch & Shell2 Kommentare

Hallo zusammen, da ich länger nicht mehr hier im Forum war ist es längst überfällig wieder einmal eine Frage ...

Batch & Shell

Einen bestimmten Teil einer Textdatei auslesen

gelöst Frage von Focus1610Batch & Shell5 Kommentare

Hallo, ich brauche mal einen Denkanstoß. Ich bekomme per FTP von einem Kunden täglich mehrere Textdateien. Diese haben unterschiudlich ...

Batch & Shell

Batch soll Informationen aus Logfiles auslesen

gelöst Frage von Eichhorn63Batch & Shell8 Kommentare

Hallo, Ich bin neu im Forum und habe folgende Frage: Aus mehreren, jeweils über 1000 Zeilen großen Logfiles sollen ...

Neue Wissensbeiträge
Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 4 StundenGoogle Android2 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 5 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 8 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 1 TagWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server39 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing18 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

CPU, RAM, Mainboards
32 gb RAM zu wenig?
Frage von pcguyCPU, RAM, Mainboards13 Kommentare

Hallo zusammen, mein PC verfügt über 32GB Ram. Nun kriege ich bei grossen Dateien im Illustrator die Fehlermeldung das ...