我在C:\temp\20120214.003_visual_sciences_web_feed.out.gz
文件中没有几个日志文件。为这些日志文件创建的文件名在创建之日即根据YYYMMDD格式命名。现在,我要编写一个批处理文件,以检索在2013年1月1日至2013年9月1日之间创建的文件的日志文件。
我是批处理文件脚本的新手。基于文件名,我正在考虑遍历所有文件,从1-6获取每个文件名的索引,并将其过滤以检查日期条件(使用date1和date2之间)。
如何使用简单的AND条件完成此操作,或者我们还有其他方法吗?
很难准确地说出您想要什么。但我认为这应该很接近:
在命令提示符下(无批处理):
for /f "delims=" %F in ('dir /b "c:\temp\*.out.gz"') do @if "%F" geq "20130101" if "%F" lss "20130902" @echo %F
从批处理脚本中:
for /f "delims=" %%F in ('dir /b "c:\temp\*.out.gz"') do if "%%F" geq "20130101" if "%%F" lss "20130902" echo %%F
或格式化良好:
@echo off
for /f "delims=" %%F in ('dir /b "c:\temp\*.out.gz"') do (
if "%%F" geq "20130101" if "%%F" lss "20130902" echo %%F
)
上述解决方案将包含2013年9月1日以来的文件。如果您不想包含该日期,则将最后一个字符串更改为“ 20130901”。
请注意,IF是在进行字符串比较,而不是日期或数字比较。这仅适用,因为您的日期格式为YYYYMMDD。
如果您还有其他.out.gz
文件不是以日期开头的,因此应该忽略,那么您可以添加FINDSTR正则表达式来提高选择的准确性。不幸的是,FINDSTR正则表达式的支持非常有限-不支持[0-9]{8}
之类的东西。
@echo off
for /f "delims=" %%F in (
'dir /b "c:\temp\*.out.gz"^|findstr "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.'
) do if "%%F" geq "20130101" if "%%F" lss "20130902" echo %%F