2015-05-18 125 views
0

我有以下文件的目录:批次:比较日期字符串

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

我想

  1. 提取日期:从文件名,如果该字符串%YY%MM%DDu_ex%YY%MM%DD.log
  2. 检查%YY%MM%DD是“更大”,即比特定日期更近,例如150101

我只知道要提取字符串的一部分,我可以使用%var::~start,length但我不知道该怎样做休息想法..以及如何通过目录的文件做了..

回答

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,所以也许你正在使用一些其他的操作系统。

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 

发生在相同的目录中的日志文件