需要帮助在批处理文件中保留文件名中的条件

时间:2013-10-15 15:57:20

标签: windows batch-file

您好我在C:\ temp \ 20120214.003_visual_sciences_web_feed.out.gz文件中有很少的日志文件。为这些日志文件创建的文件名在创建日期时根据YYYMMDD格式命名, 现在我想编写一个批处理文件,根据以下条件检索日志文件 “在1-jan-2013到1-sep-2013之间创建的文件。”

我是批处理文件脚本的新手。 根据文件名我想到循环遍历所有文件,从1-6获取每个文件名的索引并过滤它以检查日期条件(使用BETWEEN date1和date2) 任何人都可以帮我解决这个问题,如何使用AND条件以简单的方式实现这一目标,或者我们还有其他任何方式

由于

1 个答案:

答案 0 :(得分: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
)

以上解决方案将包含1-sep-2013的文件。如果您不想包含该日期,请将最后一个字符串更改为“”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