如何修改Findstr脚本按文件名或修改日期遍历XML文件
解决批处理按文件名/修改日期遍历XML文件的问题
原批处理代码通过findstr直接扫描所有.xml文件时,遍历顺序由系统返回的文件列表决定,并非按文件名或日期有序。要实现指定顺序遍历,需要先通过dir命令生成有序的文件列表,再逐个对文件执行搜索操作,具体方案如下:
一、按文件名顺序遍历
使用dir /B /ON *.xml按文件名升序列出所有XML文件,循环处理每个文件:
@echo off setlocal EnableDelayedExpansion > temp.txt ( rem 按文件名升序列出XML文件,降序用/O-N for /F "delims=" %%f in ('dir /B /ON *.xml') do ( for /F "delims=" %%a in ('findstr /I /L "<a> <b> <c>" "%%f"') do ( set "line=%%a" set "line=!line:*<a>=!" set "line=!line:*<b>=!" set "line=!line:*<c>=!" for /F "delims=<" %%b in ("!line!") do echo %%b ) ) )
二、按修改日期顺序遍历
使用dir /B /OD *.xml按修改日期从旧到新列出文件,如需从新到旧则替换为/O-D:
@echo off setlocal EnableDelayedExpansion > temp.txt ( rem 按修改日期从旧到新列出XML文件,新到旧用/O-D for /F "delims=" %%f in ('dir /B /OD *.xml') do ( for /F "delims=" %%a in ('findstr /I /L "<a> <b> <c>" "%%f"') do ( set "line=%%a" set "line=!line:*<a>=!" set "line=!line:*<b>=!" set "line=!line:*<c>=!" for /F "delims=<" %%b in ("!line!") do echo %%b ) ) )
说明
原代码直接让findstr处理*.xml时,findstr不会对文件进行排序,因此添加排序无效。通过dir命令先生成有序的文件列表,再逐个传递给findstr,就能保证遍历顺序符合要求。
内容的提问来源于stack exchange,提问作者R0NiN
相关产品推荐
相关产品推荐

