我有一个包含以下文件的目录:
u_ex150518.log
u_ex150517.log
u_ex150516.log
...
我想
%YY%MM%DD
u_ex%YY%MM%DD.log
%YY%MM%DD
是否为"更大",这是否比特定日期更新,例如150101
我只知道要提取字符串的一部分我可以使用%var::~start,length
,但我不知道如何做其余的...以及如何通过目录的文件进行处理..
答案 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
。如果您想要使用geq
或leq
来包含目标日期,则可以使用更高/更低或更低。
关键是您的日期格式yymmdd会自动排序并使比较更容易。
另请注意,在Windows批处理中,%varname%
而非%varname
访问变量,但参数(%0 ..%9)和元变量(%% a)除外
此外,我假设您指的是cmd
批次,但您还没有标记您的问题cmd
,所以也许您正在使用其他操作系统。