批处理:比较日期字符串

时间:2015-05-18 17:20:27

标签: batch-file

我有一个包含以下文件的目录:

u_ex150518.log
u_ex150517.log
u_ex150516.log
...

我想

  1. 从文件名%YY%MM%DD
  2. 中提取日期:u_ex%YY%MM%DD.log
  3. 检查字符串%YY%MM%DD是否为"更大",这是否比特定日期更新,例如150101
  4. 我只知道要提取字符串的一部分我可以使用%var::~start,length,但我不知道如何做其余的...以及如何通过目录的文件进行处理..

2 个答案:

答案 0 :(得分:0)

@echo off
if not exist log md log
setlocal enabledelayedexpansion
:a
set /p check=Enter date to check against in this format (YY-MM-DD):
set check=!check:-=!
    set LIST=
    for %%I in (*) do (
    set LIST=%%I
    ::isolate the date from the original file name
    set lo=!LIST:u_ex=!
    set log=!lo:.log=!
    ECHO --------------------------
    echo !log!
    ::separate into yy/mm/dd
    set yy=!log:~0,2!
    set mm=!log:~2,2!
    set dd=!log:~4,2!
    echo !yy!-!mm!-!dd! extracted from !LIST!
    echo !yy!-!mm!-!dd! extracted from !LIST! >>log\log.txt
    if !log! GTR !check! echo !LIST! is newer than !check!
    if !log! LSS !check! echo !LIST! is older than !check!
    if !log! GTR !check! echo !LIST! is newer than !check! >log\log.txt
    if !log! LSS !check! echo !LIST! is older than !check! >log\log.txt
    echo -------------------------
    )
pause

放在与日志文件相同的目录中

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
:: This date could be entered using a set/p or accepted as a parameter if required
SET /a targetdate=150517
SET "sourcedir=U:\sourcedir"
FOR %%a IN ("%sourcedir%\u_ex*.log") DO (
 IF /i "%%~na" gtr "u_ex%targetdate%" ECHO %%~na
)

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

可悲的是,你不能说出你真正想要的输出。这会在目标日期之后生成文件的名称部分。如果您想要更早,请将gtr替换为lss。如果您想要使用geqleq来包含目标日期,则可以使用更高/更低或更低。

关键是您的日期格式yymmdd会自动排序并使比较更容易。

另请注意,在Windows批处理中,%varname%而非%varname访问变量,但参数(%0 ..%9)和元变量(%% a)除外

此外,我假设您指的是cmd批次,但您还没有标记您的问题cmd,所以也许您正在使用其他操作系统。