保留批处理文件中文件名的条件

问题描述 投票:0回答:1

我在C:\temp\20120214.003_visual_sciences_web_feed.out.gz文件中没有几个日志文件。为这些日志文件创建的文件名在创建之日即根据YYYMMDD格式命名。现在,我要编写一个批处理文件,以检索在2013年1月1日至2013年9月1日之间创建的文件的日志文件。

我是批处理文件脚本的新手。基于文件名,我正在考虑遍历所有文件,从1-6获取每个文件名的索引,并将其过滤以检查日期条件(使用date1和date2之间)。

如何使用简单的AND条件完成此操作,或者我们还有其他方法吗?

windows batch-file
1个回答
0
投票

很难准确地说出您想要什么。但我认为这应该很接近:

在命令提示符下(无批处理):

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
© www.soinside.com 2019 - 2024. All rights reserved.