Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Batch - Mehrere Tausend XML Dateien in monatlich neuen Ordnern nach verschiedenen Strings durchsuchen

Frage Entwicklung Batch & Shell

Mitglied: BBUser

BBUser (Level 1) - Jetzt verbinden

05.11.2010 um 20:13 Uhr, 5316 Aufrufe, 16 Kommentare

Die XML Dateien enthalten Kundennummern in XML Tags. Die Anzahl der jeweiligen Kundennummern ist von Interesse.

Hallo,

mal wieder eine kleine Batchaufgabe

Habe schon hier http://www.administrator.de/index.php?content=141792 und hier http://www.administrator.de/index.php?content=105088 geschaut. Beides ist aber nicht genau das was ich suche.

Details:

Wir bekommen via FTP XML Dateien. Diese landen später in Ordnern mit folgendem Schema: %BlaBla%_old_201011. Für jeden Monat gibt es also einen Ordner. Über den Monat kommen so gerne mal mehr als 6000 XML Dateien zusammen.

Die Dateien heißen immer anders, sind aber was die XML Tags angeht gleich aufgebaut. Der Inhalt der Tags variiert von Kunde zu Kunde. Jede XML enthält auch den Tag <accountnummer>%Kundennummer%</accountnummer>.

Die XML Dateien des Ordners sollen nun z.B: täglich oder wöchentlich (via scheduled Tasks) duchsucht werden. Interessant hierbei ist nun die Häufigkeit der Kundennummern (Pro XML immer genau eine Kundennummer). Ein Suchlauf ergibt also z.B: das Kundennummer 12345 10x gefunden wurde (also in 10 XMLs) und Kundennummer 55555 20x (also in 20 XMLs). Diese Werte sollen besten Falls in eine HTML geschrieben werden, welche eine Tabelle enthält.

Öffnet man die HTML sollen die Kundennummern (und evtl. Kundennamen) dann sauber nebeneinander stehen und darunter die Häufigkeiten im jeweligen Monat.

Ich denke über einen Findstr lässt sich das sicher lösen. Wenn man sich dann merkt bei welcher Datei man beim letzten Suchlauf war muss nicht wieder alles neu gescannt werden und die Zahlen (Häufigkeit) sollten auch stimmen.

Nun die entscheidene Frage - Lösbar?

Grüsse
Mitglied: bastla
05.11.2010 um 21:30 Uhr
Hallo BBUser!

Soferne es bereits einen Index aller Kundennummern (als Textdatei "KundenNr.txt" mit jeweils einer Nummer je Zeile) gäbe und
<accountnummer>%Kundennummer%</accountnummer>
jeweils alleine in einer Zeile stünde, ginge das Ermitteln der Werte etwa so:
01.
@echo off & setlocal 
02.
set "Ein=D:\XML-Ordner" 
03.
set "Aus=D:\Auswertung.txt" 
04.
set "Index=D:\KundenNr.txt" 
05.
set "Such=\<accountnummer\>" 
06.
set "Such2=\</accountnummer\>" 
07.
 
08.
del "%Aus%" 2>nul 
09.
pushd "%Ein%" 
10.
for /f "usebackq delims=" %%i in ("%Index%") do for /f %%a in ('findstr /m /c:"%Such%%%i%Such2%" *.xml^|find /i /c "xml"') do >>"%Aus%" echo %%i %%a 
11.
popd
Wenn der Index erst aufgebaut werden muss, indem die Kundennummern aus allen Dateien herausgesucht werden, wäre es tatsächlich sinnvoll, eine Mehrfachverarbeitung zu verhindern - abhängig von zB der verwendeten Backupsoftware könnte dazu das Archiv-Flag verwendet werden:
01.
@echo off & setlocal 
02.
set "Ein=D:\XML-Ordner" 
03.
set "Aus=D:\Auswertung.txt" 
04.
set "Index=D:\KundenNr.txt" 
05.
set "Such=\<accountnummer\>" 
06.
set "Such2=\</accountnummer\>" 
07.
 
08.
pushd "%Ein%" 
09.
if not exist "%Index%" copy nul "%Index%">nul 
10.
for /f "delims=" %%i in ('dir /b /aa *.xml') do for /f "tokens=2 delims=<>" %%a in ('findstr /c:"%Such%" "%%i"') do findstr /x "%%a" "%Index%">nul || >>"%Index%" echo %%a 
11.
attrib -a *.xml 
12.
 
13.
del "%Aus%" 2>nul 
14.
for /f "usebackq delims=" %%i in ("%Index%") do for /f %%a in ('findstr /m /c:"%Such%%%i%Such2%" *.xml^|find /i /c "xml"') do >>"%Aus%" echo %%i %%a 
15.
popd
Um die Ausgabe in eine HTML-Datei zu schreiben, könntest Du den gesamten Code, der vor der zu füllenden Tabelle benötigt wird, als "HTML1.txt" und alles danach als "HTML2.txt" vorbereiten und anstatt
del "%Aus%" 2>nul
die Zeile
copy HTML1.txt "%Aus%">nul
verwenden, die Ausgabe der einzelnen Kunden mit den entsprechenden Tags versehen (Achtung, "<" und ">" müssen als "^<" bzw "^>" maskiert ausgegeben werden) und als letzte Zeile noch
>>"%Aus%" type HTML2.txt
hinzufügen.

Grüße
bastla

P.S.: Alles, was da oben steht, sind übrigens unbewiesene Behauptungen (= ungetestet) ...

[Edit] Suche präziser gestaltet [/Edit]
Bitte warten ..
Mitglied: BBUser
05.11.2010 um 22:55 Uhr
Hallo Bastla,

danke für die wie immer sehr kompetente Antwort.

Die Kundennummern sind bekannt und können ohne Probleme in einer Datei stehen. In den XMLs steht diese auch in einer eigenen Zeile.

Ein Anfang ist das schonmal.

Wird getestet Ich berichte dann.
Grüße

edit Funktioniert in kleinem Umfang schonmal sehr gut. Weiter testen.... Und schauen wie das mit dem HTML klappt.

edit2
Leider werden ähnliche Kundennummer doppelt gezählt. Bsp.: 5095 & 50951. Hier wird dann bei 50951 einmal 5095 und einmal 50951 gezählt. Habe ich also 2 XML Dateien - einmal vom Kunden 5095 und einmal vom 50951 kommt das Script am Ende auf eine Gesamtzahl von 3 (Da 3x 5095 gefunden wurde). Kann man das lösen?

edit3 // HTML geht auch - Nur wie füge ich nach jeder Kundennummer / Anzahl zB. ein einfaches <br> für einen Zeilenumbruch ein? Oder eben ein <td> für ne Tabelle oder anderen code? In HTML1 und 2 kann ich die Sachen ja wunderbar für den Header und Footer mitgeben, was einfach, aber genial ist.
Bitte warten ..
Mitglied: bastla
05.11.2010 um 23:44 Uhr
Hallo BBUser!

An unterschiedliche Länge von Kundennummern hatte ich tatsächlich nicht gedacht.

Ich bessere oben ein wenig nach ...
Nur wie füge ich nach jeder Kundennummer / Anzahl zB. ein einfaches <br> für einen Zeilenumbruch ein?
Etwa so:
... echo %%i %%a ^<br^>
Grüße
bastla
Bitte warten ..
Mitglied: BBUser
06.11.2010 um 14:34 Uhr
Teste gerade und die Anzahl wird schon fast richtig dargestellt.

Script:
01.
::@echo off &  
02.
setlocal 
03.
set "Ein=F:\XMLtest\XML-Ordner" 
04.
set "Aus=F:\XMLtest\XML-OrdnerAuswertung.html" 
05.
set "Index=F:\XMLtest\KundenNr.txt" 
06.
set "Such=\<accountref\>" 
07.
set "Such2=\</accountref\>" 
08.
 
09.
copy HTML1.txt "%Aus%">nul 
10.
pushd "%Ein%" 
11.
if not exist "%Index%" copy nul "%Index%">nul 
12.
for /f "delims=" %%i in ('dir /b /aa *.xml') do for /f "tokens=2 delims=<>" %%a in ('findstr /c:"%Such%" "%%i"') do findstr /x "%%a" "%Index%">nul || >>"%Index%" echo %%a 
13.
attrib -a *.xml 
14.
 
15.
del "%Aus%" 2>nul 
16.
for /f "usebackq delims=" %%i in ("%Index%") do for /f %%a in ('findstr /m /c:"%Such%%%i%Such2%" *.xml^|find /i /c "xml"') do >>"%Aus%" echo %%i %%a 
17.
popd 
18.
>>"%Aus%" type HTML2.txt 
19.
pause
Die Ausgabe der HTML sieht jedoch komisch aus.

5095 1 2323 0 50951 1 50952 1 50953 2 accountref 0 - Alles in einer Reihe ist erstmal ok. Aber das Accountref schreibt das Script komischer Weise in die KundenNr.txt und später landet es in der Ausgabe. Verstehe nur nicht warum das so ist. ?

Grüße
Bitte warten ..
Mitglied: bastla
06.11.2010 um 15:01 Uhr
Hallo BBuser!
Alles in einer Reihe ist erstmal ok
... und kann auch nicht anders sein, solange in Zeile 16 (lässt sich übrigens leichter referenzieren, wenn Du Deinen Code unter entsprechenden Tags postest) nur "echo %%i %%a" steht.
Aber das Accountref schreibt das Script komischer Weise in die KundenNr.txt
Da der Begriff als "Suchbegriff" verwendet wird, muss er aus einer Zeile stammen, in welcher er das 2. "token" darstellt und die daher nicht der angenommenenen Struktur, zB
<accountref>5095</accountref>
entspricht; die Zerlegung erfolgt ja anhand der Trennzeichen "<" und ">", sodass sich also für diese Zeile die "tokens"
1: accountref
2: 5095
3: /accountref

ergeben - befindet sich zB am Beginn der Zeile zumindest ein Leerzeichen (oder zumindest ein anderes Zeichen als "<" oder ">"), verschiebt sich die Nummerierung. Soferne es nur um Leerzeichen ginge, ließe sich die Liste der Trennzeichen ("delims") in Zeile 12 einfach erweitern:
for /f "delims=" %%i in ('dir /b /aa *.xml') do for /f "tokens=2 delims=<> " %%a in ...
Grüße
bastla
Bitte warten ..
Mitglied: BBUser
07.11.2010 um 21:31 Uhr
So,

damit alle was davon haben - funktioniert erstmal soweit - nur der Code aus HTML1.txt landet irgendwie nicht mehr in der Ausgabedatei. Für die Hilfe schonmal ein großes Dankeschön an Bastla.

01.
 
02.
@echo off & setlocal 
03.
set "Ein=F:\XMLtest\XML-Ordner" 
04.
set "Aus=F:\XMLtest\XML-OrdnerAuswertung.html" 
05.
set "Index=F:\XMLtest\KundenNr.txt" 
06.
set "Such= <accountref>" 
07.
set "Such2=</accountref>" 
08.
 
09.
copy HTML1.txt "%Aus%">nul 
10.
pushd "%Ein%" 
11.
if not exist "%Index%" copy nul "%Index%">nul 
12.
for /f "delims=" %%i in ('dir /b /aa *.xml') do for /f "tokens=2 delims=<>" %%a in ('findstr /c:"%Such%" "%%i"') do findstr /x "%%a" "%Index%">nul || >>"%Index%" echo %%a 
13.
attrib -a *.xml 
14.
 
15.
del "%Aus%" 2>nul 
16.
for /f "usebackq delims=" %%i in ("%Index%") do for /f %%a in ('findstr /m /c:"%Such%%%i%Such2%" *.xml^|find /i /c "xml"') do >>"%Aus%" echo %%i %%a ^<br^> 
17.
 
18.
popd 
19.
>>"%Aus%" type HTML2.txt 
20.
pause 
21.
 
Eine Frage bzgl. der HTML-ausgabe habe ich noch,

kann man die einzelnen Werte der jeweiligen Kundennummern nicht in Variablen schreiben, und deren Werte dann in den HTML code?

Ich denke mir das so: Suchlauf durch die Dateien, n-Mal Kunde 1234 gefunden, Wert "n" in Variable n1 schreiben, Variable HTML_n1 im HTML code suchen und durch n1 ersetzen. Das ganze für jeweils alle Kundennummer.

Sofern mein HTML Code dann schon eine schicke Tabelle ist und in z.B. Reihe 1 Kunde 1 steht und in meiner KundenNr.txt Kunde 1 auch der erste ist, nach dem ich in meinen Dateien suche, so sollten dann in der Wertespalte, der Reihe 1 die Werte für Kunde 1 auftauchen (Eingefügt duch das Variablen suchen / ersetzen).

Oder?
Bitte warten ..
Mitglied: bastla
07.11.2010 um 21:45 Uhr
Hallo BBUser!
nur der Code aus HTML1.txt landet irgendwie nicht mehr in der Ausgabedatei.
Ist so nicht ganz richtig: bis zur Zeile 15 ist er drin - die hätte eigentlich durch die jetzige Zeile 9 ersetzt werden sollen (was sich ja aber noch immer machen lässt) ...
Deine zusätzlichen Überlegungen kann ich nicht so ganz nachvollziehen - die HTML-Tabellen-Zeilen kannst Du doch problemlos (und mit der Gewissheit, dass KundenNr. und Häufigkeit auch wirklich zusammengehören) etwa so schreiben:
... echo ^<tr^>^<td^>%%i^</td^>^<td^>%%a^</td^</tr^>
Grüße
bastla
Bitte warten ..
Mitglied: BBUser
08.11.2010 um 09:32 Uhr
Hallo Bastla,

im Prinzip ist diese Aufgabe gelöst. Manchmal kommt es jedoch vor, das das Script den String "accountref" in die KundenNr.txt schreibt. Kann man das noch abstellen?

Grüsse
Bitte warten ..
Mitglied: bastla
08.11.2010 um 10:37 Uhr
Hallo BBUser!
Kann man das noch abstellen?
Ohne Veränderung der Ausgangsdatei (die Begründung für das Auftauchen des Strings findest Du oben) wäre es am einfachsten, im Nachhinein alle Zeilen, in denen "accountref" vorkommt, auszufiltern:
01.
move "%Aus%" "%temp%\TempFile.html" 
02.
findstr /v "accountref" "%temp%\TempFile.html">"%Aus%"
Grüße
bastla
Bitte warten ..
Mitglied: BBUser
08.11.2010 um 12:09 Uhr
Recht hast Du. Manchmal kann das so einfach sein.

2 Fragen hätte ich dazu noch, welche die Sache etwas komfortabler gestalten.

Einige der Kunden verwenden manchmal 2 verschiedene (oder mehr) Kundennummern. Lassen sich die Werte der jeweiligen Kundennummern einfach addieren und einer 3ten Nummer bzw. Variablen zuordnen? Ich könnte z.B. die 2 Nummern des einen Kunden als erstes in die KundenNr.txt schreiben. Deren zwei Ergebnisse sollten dann zu einem addiert werden. Dafür müsste man wahrscheinlich eine komplizierte extra Routine verwenden, oder?

Und, die zweite Frage. Lässt sich das Script so erweitern, dass Die Kundennummern dann später durch die Kundennamen ersetzt werden? Ich teste das gerade mit einem call befehl und einer zusätzlichen .bat - was aber in einem Fehler endet -> replace.bat is not recognized as an internal or external comand....

Grüße
Bitte warten ..
Mitglied: bastla
08.11.2010 um 19:15 Uhr
Hallo BBUser!
Dafür müsste man wahrscheinlich eine komplizierte extra Routine verwenden, oder?
Jein - zusammen mit der Frage 2 würde es sich anbieten, eine zusätzliche Kundendatei ("Kundenliste.txt") aufzubauen, welche KundenNr und Kundenname enthält - dann könnte in einem ersten Schritt eine Zwischendatei ("KundenRohdaten.txt") erstellt werden, in welcher die Häufigkeiten je Kunden noch für jede KundenNr getrennt erfasst sind. Nach Sortierung dieser Datei nach dem Kundennamen ließe sich per Gruppenverarbeitung die Summe je Kunden bilden und damit dann die HTML-Datei erstellen - Voraussetzung wäre dafür natürlich, dass die neue Kundendatei sämtliche vorkommenden KundenNr enthält.

Wieder ungetestet etwa so:
01.
@echo off & setlocal 
02.
set "Ein=F:\XMLtest\XML-Ordner" 
03.
set "Aus=F:\XMLtest\XML-OrdnerAuswertung.html" 
04.
set "Index=F:\XMLtest\KundenNr.txt" 
05.
set "Liste=F:\XMLtest\KundenListe.txt" 
06.
set "Roh=F:\XMLtest\KundenRohdaten.txt" 
07.
set "Such= <accountref>" 
08.
set "Such2=</accountref>" 
09.
set "Del=;" 
10.
 
11.
del "%Roh%" 2>nul 
12.
pushd "%Ein%" 
13.
if not exist "%Index%" copy nul "%Index%">nul 
14.
for /f "delims=" %%i in ('dir /b /aa *.xml') do for /f "tokens=2 delims=<>" %%a in ('findstr /c:"%Such%" "%%i"') do findstr /x "%%a" "%Index%">nul || >>"%Index%" echo %%a 
15.
attrib -a *.xml 
16.
 
17.
for /f "usebackq delims=" %%i in ("%Index%") do ( 
18.
    for /f "tokens=1* delims=%Del%" %%j in ('findstr /b "%%i%Del%" "%Liste%"') do ( 
19.
        for /f %%a in ('findstr /m /c:"%Such%%%i%Such2%" *.xml^|find /i /c "xml"') do >>"%Roh%" echo "%%k"%Del%%%a 
20.
21.
22.
popd 
23.
 
24.
move "%Roh%" "%temp%\Roh.txt" 
25.
sort /o "%Roh%" "%temp%\Roh.txt" 
26.
 
27.
copy HTML1.txt "%Aus%">nul 
28.
set "Kunde=" 
29.
for /f "usebackq tokens=1-2 delims=%Del%" %%k in ("%Roh%") do call :ProcessLine %%k %%l 
30.
>>"%Aus%" echo ^<tr^>^<td^>%Kunde:.=%^</td^>^<td^>%Anz%^</td^</tr^> 
31.
>>"%Aus%" type HTML2.txt 
32.
pause 
33.
goto :eof 
34.
 
35.
:ProcessLine 
36.
if not defined Kunde goto :Next 
37.
if "%Kunde%"==%1 (set /a Anz+=%2 & goto :eof) 
38.
>>"%Aus%" echo ^<tr^>^<td^>%Kunde:&=^&%^</td^>^<td^>%Anz%^</td^</tr^> 
39.
:Next 
40.
set "Kunde=%~1" 
41.
set /a Anz=%2 
42.
goto :eof
wobei die"Kundenliste.txt" nach dem Schema
5095;Kundenbeispiel1 
5099;Kundenbeispiel2 & so 
....;.....
aufgebaut ist - das Trennzeichen (%Del% - siehe Zeile 9) soll natürlich so gewählt sein, dass es in keinem Kundennamen vorkommt. Die "KundenRohdaten.txt" wird erst beim nächsten Durchlauf gelöscht und steht daher nach Ende des Batches zur Verfügung, um die Einzelwerte nachvollziehen zu können.

In der Annahme, dass die Kundennamen die Sonderzeichen "<|>" nicht enthalten, wird nur für die korrekte Ausgabe eines "&" vorgesorgt (siehe Zeile 38) ...

Grüße
bastla

P.S.: Mehrere KundenNr für einen einzelnen Kunden finde ich suboptimal ...

[Edit] Gruppenverarbeitung geändert [/Edit]
[Edit2] Zeile 18 (siehe unten) korrigiert [/Edit2]
Bitte warten ..
Mitglied: BBUser
08.11.2010 um 21:30 Uhr
Respekt!

Teste gerade. 2 Sachen / Fehler.

1. File not found.

Ausgabe der CMD:

01.
 
02.
 
03.
F:\XMLtest>setlocal 
04.
 
05.
F:\XMLtest>set "Ein=F:\XMLtest\XML-Ordner" 
06.
 
07.
F:\XMLtest>set "Aus=F:\XMLtest\XML-OrdnerAuswertung.html" 
08.
 
09.
F:\XMLtest>set "Index=F:\XMLtest\KND.txt" 
10.
 
11.
F:\XMLtest>set "Liste=F:\XMLtest\KundenListe.txt" 
12.
 
13.
F:\XMLtest>set "Roh=F:\XMLtest\KundenRohdaten.txt" 
14.
 
15.
F:\XMLtest>set "Such= <accountref>" 
16.
 
17.
F:\XMLtest>set "Such2=</accountref>" 
18.
 
19.
F:\XMLtest>set "Del=;" 
20.
 
21.
F:\XMLtest>del "F:\XMLtest\KundenRohdaten.txt"  2>nul 
22.
 
23.
F:\XMLtest>pushd "F:\XMLtest\XML-Ordner" 
24.
 
25.
F:\XMLtest\XML-Ordner>if not exist "F:\XMLtest\KND.txt" copy nul "F:\XMLtest\KND 
26.
.txt" 1>nul 
27.
 
28.
F:\XMLtest\XML-Ordner>for /F "delims=" %i in ('dir /b /aa *.xml') do for /F "tok 
29.
ens=2 delims=<>" %a in ('findstr /c:" <accountref>" "%i"') do findstr /x "%a" "F 
30.
:\XMLtest\KND.txt"  1>nul  || echo %a 1>>"F:\XMLtest\KND.txt" 
31.
File Not Found 
32.
 
Gebe ich F:\XMLtest\KND.txt in die Exploreradressleiste ein wird die Datei auch geöffnet.

2te Sache:

Ab der 17. Zeile bricht das Script ab und das Fenster geht zu. Kann man das irgendwie besser debuggen?

Meine Kundenliste.txt sieht so aus:


5095;Kunde2
50951;Kunde1
50953;Kunde1


Brauchen wir die KND.txt eigentlich noch, weil wir haben ja nun die Kundenliste?

Grüsse und Danke für die Hilfe.
Bitte warten ..
Mitglied: bastla
08.11.2010 um 21:53 Uhr
Hallo BBUser!
Brauchen wir die KND.txt eigentlich noch, weil wir haben ja nun die Kundenliste?
Die beiden Dateien haben unterschiedliche Aufgaben: in der "KND.txt" werden alle KundenNr aus den vorhandenen Dateien (ohne Duplikate) gesammelt (Anmerkung: wenn ".xml"-Dateien gelöscht werden, muss die "KND.txt" neu erstellt und daher ebenfalls gelöscht werden), während die "Kundenliste.txt" alle möglichen Kundennummen und die zugehörigen Namen enthält - daher: ja.

"File not found" kann auch daraus resultieren, dass es keine ".xml"-Dateien mit gesetztem "Archiv"-Attribut gibt ...
Ab der 17. Zeile bricht das Script ab und das Fenster geht zu. Kann man das irgendwie besser debuggen?
Wenn es keine (bzw genauer: nur eine leere) "KND.txt" gibt, hat die Schleife nicht viel zu tun ...

Zum Debuggen könntest Du alle Ausgaben (also auch die Fehlermeldungen) in eine Textdatei umleiten - wenn der Batch zB "Statistik.cmd" heißt, dann mit
Statistik >Log.txt 2>&1
starten - so kannst Du in aller Ruhe den Ablauf nachvollziehen (und falls Du einen vernünfitgen Editor - bei mir wäre das zB Notepad++) verwendest, lassen sich auch per "Suchen / Ersetzen" von "2 Zeilenschaltungen durch 1 Zeilenschaltung" (in "Notepad++" mit "Suchmodus: Erweitert" die Ersetzung von "\r\n\r\n" durch "\r\n") die Leerzeilen eliminieren ...

Grüße
bastla
Bitte warten ..
Mitglied: BBUser
08.11.2010 um 22:07 Uhr
Hallo Bastla,

die KND.txt sieht so aus:

50953
50951
5095

Einfach manuel die Testkundennummern eingetragen.

Die Idee mit dem Log ist super.

Da schauts wie folgt aus.

01.
F:\XMLtest\XML-Ordner>for /F "delims=" %i in ('dir /b /aa *.xml') do for /F "tokens=2 delims=<>" %a in ('findstr /c:" <accountref>" "%i"') do findstr /x "%a" "F:\XMLtest\KND.txt"  1>nul  || echo %a 1>>"F:\XMLtest\KND.txt"  
02.
File Not Found 
03.
 
04.
F:\XMLtest\XML-Ordner>attrib -a *.xml  
05.
f was unexpected at this time. 
06.
F:\XMLtest\XML-Ordner>    for f "tokens=1* delims=;" %j in ('findstr /b "%iDelListe') do (
Verstehe nicht ganz welches F ihm da nicht passt.
NP++ verwende ich ebenfalls.

Grüße
Bitte warten ..
Mitglied: bastla
08.11.2010 um 22:14 Uhr
Hallo BBUser!

Das "f" ist das aus Zeile 18 (in Deinem geposteten Log in Zeile 6) - es fehlt "/" davor

Eigentlich sollte die ganze Zeile eher so aussehen:
for /f "tokens=1* delims=%Del%" %%j in ('findstr /b "%%i%Del%" "%Liste%"') do (
Ich korrigiere das auch oben ...

Grüße
bastla
Bitte warten ..
Mitglied: BBUser
08.11.2010 um 22:36 Uhr
Stimmt. Das fehlte.

Nun läuft das Script schonmal weiter, hat aber mit der Rohdaten-Datei ein Problem.

Bsp.:

F:\XMLtest\XML-Ordner>(for /F "tokens=1* delims=;" %j in ('findstr /b "50953DelListe') do ( for /f %a in ('findstr /m /c:" <accountref>50953</accountref>" *.xml|find /i /c "xml"') do echo "%k";%a 1>>"F:\XMLtest\KundenRohdaten.txt" )
The system cannot find the file specified.

und später:

F:\XMLtest>copy HTML1.txt "F:\XMLtest\XML-OrdnerAuswertung.html" 1>nul

F:\XMLtest>set "Kunde="

F:\XMLtest>for /F "usebackq tokens=1-2 delims=;" %k in ("F:\XMLtest\KundenRohdaten.txt") do call :ProcessLine %k %l
The system cannot find the file F:\XMLtest\KundenRohdaten.txt.

Diese wird doch automatisch erstellt, oder?

edit// Das mit den Rohdaten klappt nun doch - die korrigierte Zeile bewirkte wunder. Damit landet schonmal was lesbares in der Auswertung, womit man dann morgen weiter testen kann.

Grüße
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...