0

我的文件中很少有日志C:\temp\20120214.003_visual_sciences_web_feed.out.gz文件。为这些日志文件创建的文件名基于它们创建之日的 YYYMMDD 格式命名。现在我想编写一个批处理文件,用于检索 2013 年 1 月 1 日至 2013 年 1 月 1 日之间创建的文件的日志文件。

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

我怎样才能以简单的方式使用 AND 条件来实现这一点,或者我们还有其他方式吗?

4

1 回答 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
于 2013-10-15T17:00:59.547 回答