查找通配符文件名的日期并与当前日期进行比较

时间:2014-09-25 09:18:06

标签: batch-file

我们使用一个运行的软件,并在完成时创建一个文件,标题中包含完成日期和时间。

在一个set文件夹中,每天都有一个文件,文件的主要名称是相同的,它只是文件名中更改的日期和时间。

创建此文件后,我们知道该过程已完成,然后我们要运行一系列命令。

我们要运行批处理文件以使用文件名中的当前日期搜索特定文件夹中的文件,然后查找该文件的日期,然后将其与当前日期进行比较。如果测试是肯定的,我们知道该过程已经完成当天,然后我们可以继续进行。如果日期不匹配,则等待4分钟并再次尝试,直到找到今天创建的文件。

我遇到的问题是创建的文件名的日期与文件创建日期的顺序不同,所以我无法比较。我不知道如何更改此命令,以便命令可以找到该文件并比较日期。

用于停止/启动服务的命令:相同的向下工作正常,在单独的批处理文件中进行测试。这是我无法弄清楚的查找文件和日期比较部分。

你可能会看到我在这种命令序列上有点生疏,也许我会以错误的方式解决这个问题,所以一些帮助表示赞赏。

出于测试目的,我已经放入了Echo和暂停,因此我可以在测试时查看事情的进展情况。我尝试测试时,文件名有一个日期,但最终需要使用某种插入当前日期的通配符来搜索/比较。

这是我到目前为止所做的:

REM .............Start Script.................
@echo on
:LOOP
set currentDate=%date%
SET filename="x:\DATA\File Upload Summary Report 2014-09-25*.*"
pause
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
Pause
REM next command displays date of screen so I can compare
ECHO %filedatetime:~0,-6% >> %destination%
Pause
IF %filedatetime:~0, 10% == %currentDate% goto same

goto notsame

:same
REM service stop & start commands
Echo Same
pause
net stop nxServerV3
REM wait for 5 seconds by using ping, then next line returns y
@ping -n 4 -w 1000 0.0.0.1 > NUL
CHOICE/cyn t:Y,5

REM start nexus server
@ping -n 4 -w 1000 0.0.0.1 > NUL
net start nxServerV3
REM wait for 5 seconds by using ping
@ping -n 4 -w 1000 0.0.0.1 > NUL
net start ConnectorService
@ping -n 4 -w 1000 0.0.0.1 > NUL
goto end

:notsame
REM  Loop scrip after 4 minutes
Echo Not Same
echo Press any key to exit...
if ERRORLEVEL 1 goto end

timeout /t 240
goto :LOOP

:end
endlocal

感谢您的帮助。

改变方法

好的,我改变了我的想法。由于文件是使用文件名中的日期和时间创建的,而不是比较日期,而是我现在只需将日期添加到文件名中,然后搜索该文件名。唯一的问题是文件名需要外卡,因为文件名中有一些额外的细节,但不想匹配搜索的那部分。我刚刚忘记了这个序列,因为它在查找文件时似乎没有使用外卡,它似乎是将外卡作为文件名的一部分。除此之外,新方法似乎运作正常。

REM .............Start Script.................
Echo on
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"

set currentDate=%date%
set fulldate=%YYYY%-%MM%-%DD%
pause 

SET filename="x:\DATA\File Upload Summary Report %fulldate%*.pdf"
pause

:LOOP

if exist filename goto restart

goto notexist

2 个答案:

答案 0 :(得分:0)

首先你可以使用超时1> nul暂停你的代码一秒钟也用于比较文件看看forfiles /?命令它非常有用它支持日期/时间比较

答案 1 :(得分:0)

由于您正在使用Nexus(但应考虑使用v4),因此可以安全地为您提供操作子字符串的公式。既然你没有说明要比较的两个字符串的格式是什么,你就必须自己做硬yakka。

简单地说,要从var中提取子字符串,请使用

set newvar=%var:~m,n%

其中m是起始位置(从 0 开始计数),如果为正,则从结束开始计数(如果为负)。 如果为正数,则n为字符数,如果为负数则为count-from-end。

[,n]是可选的。

OTT,以任何所需的顺序将子串联在一起,就像它们是普通的环境变量一样。