我想编写一个批处理脚本,它将在特定位置通过.xml文件进行解析,并在xml文件中输出特定标签的总数。但是这样做时,文件夹中有很多.xml文件,但我只想解析文件名中没有字符串“ DEL”的那些.xml文件。
例如, 假设我在文件夹中有以下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
在上面的语句中,我只想在文件名中不包含“ DEL”的.xml文件中搜索/ORDNUM
下面是我现在正在使用的脚本:
@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"
答案 0 :(得分:0)
使用通配符作为findstr的输入,您不能排除任何文件,您需要/ f来解析由另一个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"
答案 1 :(得分:0)
这是一个简单的batch-file尝试完成此任务的示例。 它假定您对包含/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"