Откажитесь от определенного набора XML-файлов при анализе множества XML-файлов в определенной папке в пакетном скрипте - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу написать пакетный скрипт, в котором он будет анализировать XML-файлы в определенном месте и выводить общее количество определенного тега в XML-файлах. Но при этом у меня в папке довольно много XML-файлов, но я хочу проанализировать только те XML-файлы, которые не содержат строку «DEL» в именах файлов.

Например, Предположим, у меня есть следующий список XML-файлов в папке:

abc.xml     
pwrdt.xml     
terwyw.xml     
drDELyt.xml     
yrte.xml     
uyteDEL.xml     
DELytety.xml     
ahdDELwe.xml     

Я хочу написать пакетный скрипт, который анализирует только те XML-файлы из приведенного выше списка, который не содержит строку DEL в имени файла.

Так что я хочу разобрать только,

abc.xml     
pwrdt.xml     
terwyw.xml     
yrte.xml


@echo off    
findstr /ip /c:"/ORDNUM" C:\Users\mypath\Desktop\folder\*.xml >> log-it.txt 

В приведенном выше заявлении я хочу искать /ORDNUM только в тех XML-файлах, которые НЕ содержат «DEL» в имени файла

Ниже приведен скрипт, который я сейчас использую:

@Echo off
(for /f "delims=" %%F in ('Dir /B "C:\Users\soumya.kanti.dey\Desktop\Splunk\*.xml" ^| Findstr /v "DEL" ') do (
    Echo Processing file %%F
    findstr /ip /c:"/ORDNUM" "%%F"
)) > log-it.txt

for /f "delims=: tokens=2" %%C in ('find /C "/ORDNUM" log-it.txt') Do Set /A "Count=%%C"
echo %count% > "C:\Users\soumya.kanti.dey\Desktop\total.txt"

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Вот пример простой попытки выполнить эту задачу. Предполагается, что вы довольны количеством строк, содержащих /ORDNUMBER, а не количеством его экземпляров (что не обязательно совпадает) .

@>"%UserProfile%\Desktop\total.txt" (   For /F Delims^=^ EOL^= %%A In (
        'FindStr /IMP "\/ORDNUMBER" *.xml 2^>Nul^|Find /V "DEL"'
    )Do @For /F Tokens^=1* %%B In ('Find /C "/ORDNUMBER" "%%A"')Do @Echo(%%C)

Еслисодержание total.txt не показывает то, что вы хотели, пожалуйста, объясните лучше вашу общую задачу.

Если вам нужна только сумма для всех файлов вместе, без указания отдельных имен файлов, связанных с каждым, вы могли быпопробуйте это, (который не использует петли For) .

@(FindStr /IMP "\/ORDNUMBER" *.xml 2>Nul|Find /V "DEL"|FindStr /IF:/ "\/ORDNUMBER"|Find /V /C "")>"%UserProfile%\Desktop\total.txt"
0 голосов
/ 11 апреля 2019

Используя подстановочный знак в качестве входных данных для findstr, вы не можете исключать какие-либо файлы, вам понадобится for / f, чтобы проанализировать вывод dir, отфильтрованный другим find / findstr / v, чтобы обработать только нужные XML-файлы.

@Echo off
for /f "delims=" %%F in ('Dir /B "C:\Users\mypath\Desktop\folder\*.xml" ^| Findstr /v "DEL" ') do findstr /ip /c:"/ORDNUM" "%%F" >> log-it.txt

Поскольку findstr не выводит имя файла при обработке одного файла, который вы можете использовать

@Echo off
(for /f "delims=" %%F in ('Dir /B "C:\Users\mypath\Desktop\folder\*.xml" ^| Findstr /v "DEL" ') do (
    Echo Processing file %%F
    findstr /ip /c:"/ORDNUM" "%%F"
)) > log-it.txt

Изменено >> на > для воссоздания файла при каждом запуске.

Чтобы сохранить количество совпадений в файле log-it.txt используйте (добавить)

for /f "delims=: tokens=2" %%C in ('find /C "/ORDNUM" log-it.txt') Do Set /A "Count=%%C"
echo %count% > "C:\Users\mypath\Desktop\total.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...