在批处理脚本中解析特定文件夹中的大量 .xml 文件时丢弃一组特定的 .xml 文件
Discard a particular set of .xml files while parsing through numerous .xml files in a particular folder in a batch script
我想编写一个批处理脚本,它将在特定位置解析 .xml 文件并输出 xml 文件中特定标签的总数。但是在这样做的过程中,文件夹中有很多 .xml 文件,但我只想解析文件名中没有字符串 "DEL" 的那些 .xml 文件。
例如,
假设我在文件夹中有以下 xml 个文件列表:
abc.xml
pwrdt.xml
terwyw.xml
drDELyt.xml
yrte.xml
uyteDEL.xml
DELytety.xml
ahdDELwe.xml
我想编写一个批处理脚本,它只解析上面列表中那些文件名中不包含字符串 DEL
的 .xml 文件。
所以我只想解析,
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"
使用通配符作为 findstr 的输入你不能排除任何文件,你需要一个 for /f 来解析由另一个 find/findstr /v 过滤的 dir 输出以只处理想要的 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"
这是一个简单的 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"
我想编写一个批处理脚本,它将在特定位置解析 .xml 文件并输出 xml 文件中特定标签的总数。但是在这样做的过程中,文件夹中有很多 .xml 文件,但我只想解析文件名中没有字符串 "DEL" 的那些 .xml 文件。
例如, 假设我在文件夹中有以下 xml 个文件列表:
abc.xml
pwrdt.xml
terwyw.xml
drDELyt.xml
yrte.xml
uyteDEL.xml
DELytety.xml
ahdDELwe.xml
我想编写一个批处理脚本,它只解析上面列表中那些文件名中不包含字符串 DEL
的 .xml 文件。
所以我只想解析,
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"
使用通配符作为 findstr 的输入你不能排除任何文件,你需要一个 for /f 来解析由另一个 find/findstr /v 过滤的 dir 输出以只处理想要的 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"
这是一个简单的 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"