2017-09-08 2 views
0

Ich möchte einen Stapel in Windows 10 erstellen, der die Anzahl zählt, wie oft ein bestimmtes Tag in einer XML-Datei angezeigt wird. Unten ist der Code, den ich gefunden und ausprobiert habe. Es sollte den Wert zwischen einem Satz von Tags in einer anderen Datei setzen, aber das funktioniert nicht in meinem Fall:Bat zum Zählen der Anzahl der Tage, die ein Tag in einer XML-Datei angezeigt wird

@echo off 
setlocal EnableDelayedExpansion 

for /F "delims=" %%a in (test.xml) do (
    set "line=%%a" 
    for %%X in (^"^ 
% Do NOT remove this line % 
^") do for /F "delims=" %%b in ("!line:>=%%~X!") do (
     if /I "!field!" equ "<LineCde" for /F "delims=<" %%c in ("%%b") do echo %%c >> file2.txt 
     set "field=%%b" 
    ) 
) 
Pause 

Meine XML-Datei wird wie folgt dar:

<?xml version="1.0" encoding="UTF-8"?> 
<Document><Mouvement> 
<Commande> 
    <RefCommande>xxx</RefCommande> 
    <SystemRefCde>xx</SystemRefCde> 
    <StatusCommande> 
     <CodeStatusOpCommande>xxx</CodeStatusOpCommande> 
     <DateStatusOpCommande>04/09/2017</DateStatusOpCommande> 
     <TimeStatusOpCommande>09:13:58</TimeStatusOpCommande> 
    </StatusCommande> 
    <LineCde> 
     <RefLineCde>xxx</RefLineCde> 
     <SystemRefLigneCde>32R</SystemRefLigneCde> 
     <TimeHour> 
     <TypeDate>xxx</TypeDate> 
     <ValueDate>04/09/2017</ValueDate> 
     <TimeDate>00:00:00</TimeDate> 
     </TimeHour> 
    </LineCde> 
</Commande> 
</Mouvement></Document> 

Kann mir jemand helfen mit Dies? Der Code funktionierte in Windows 7. Dank

Mit für:

findstr /ip /D:"\Vi\Defect+Evo\Traduction\testB" 

*.xml >> log-it.txt 
@echo off 
setlocal EnableDelayedExpansion 
set "string=findstr /R /N "^^" log-it.txt | find /C "/LineCde"" 

for /f %%a in ('!string!') do set count=%%a 
echo %count% 
del /Q log-it.txt 

Antwort

1

.

@echo off 
setlocal EnableDelayedExpansion 
set "string=findstr /R /N "^^" test.xml | find /C "xxx"" 

for /f %%a in ('!string!') do set count=%%a 
echo %count% 

das gleiche Skript wie oben verwenden, aber wir alle xml Dateien im Verzeichnis für die Zeichenfolge suchen, dann Rohr sie alle in eine Logdatei und Echo die Summe der Log-Datei.

@echo off 
findstr /ip /c:"xxx" *.xml >> log-it.txt 
setlocal EnableDelayedExpansion 
set "string=findstr /R /N "^^" log-it.txt | find /C ":"" 

for /f %%a in ('!string!') do set count=%%a 
echo %count% 
del /Q log-it.txt 

EDIT:

auf Ihrem Kommentar Basierend.

findstr /ip /d:\Vi\Defect+Evo\Trad\testB\te *.xml 

wird nie funktionieren. Sie können die c: nicht entfernen Dies ist kein Pfad, dies ist die Zeichenfolge, nach der gesucht werden soll.

@echo off 
findstr /ip /c:"/LineCde" D:\Vi\Defect+Evo\Traduction\testB\*.xml >> log-it.txt 
setlocal EnableDelayedExpansion 
set "string=findstr /R /N "^^" log-it.txt | find /C "/LineCde"" 

for /f %%a in ('!string!') do set count=%%a 
echo %count% 
del /Q log-it.txt 

es zu brechen ein wenig nach unten, so dass Sie bekommen, was passiert:

findstr /ip /c:"/LineCde" D:\Vi\Defect+Evo\Traduction\testB\*.xml >> log-it.txt 
    #Findstr searches for a string 
    # /i makes the search non-case sensitive. 
    # /p Skip files with non-printable characters. 
    # /c: specifies the string to find. in this case "/LineCde" 
    # then we specify where to search (D:\...) and what to search (*.xml) 
    # >> we pipe it to a log file. (log-it.txt) 
setlocal EnableDelayedExpansion 
    # enable Delayed expansion 
set "string=findstr /R /N "^^" log-it.txt | find /C "/LineCde"" 
    # Now we do the same, we read from the logfile as we wrote each of the XML entries and create them in the logfile, we just count all the entries together. 
for /f %%a in ('!string!') do set count=%%a 
    # once we found each line number, we set it as a variable 
echo %count% 
    # we print that variable to screen 
del /Q log-it.txt 
    # Now we delete the file because we do not need it and next time we will create a new file. 
+0

Es funktioniert, danke. Ich habe jedoch noch eine andere Frage: Was, wenn ich einen Ordner durchlaufen und jedes XML durchlaufen möchte, um die Zählung durchzuführen? Wie können wir das tun? – tabby

+0

@tabby Cool. Wenn Sie das erste Problem gelöst haben, markieren Sie bitte die richtige Antwort. Ich werde die Frage in ein paar Minuten bearbeiten, um Ihre zweite Frage hinzuzufügen und zu beantworten. –

+0

Ja, ich werde es als richtige Antwort markieren. Können Sie die Frage dennoch bearbeiten und danach beantworten? – tabby

0

Wie über diese Einzeiler? Dies wird gefunden für xxx zum Beispiel in der test.xml Datei und Echo an, wie oft eine Suche

FOR /F "delims=: tokens=2" %%i IN ('find /c test.xml "<LigneCde>" /i') DO echo %%i 
Verwandte Themen