将修改后的文件日期与批处理文件中的当前日期进行比较

时间:2012-02-19 13:59:05

标签: date batch-file last-modified

我需要编写一个批处理文件来做一些事情

最初我认为我的问题非常简单 - 捕获位于指定目录中的txt文件的修改日期,将该日期与当前日期进行比较,如果它们相同则执行某些操作。如果他们不这样做的话。

我用来捕捉当前日期的行是:

%date%

我用来捕获指定文件的修改日期的行是:

SET filename="C:\New Folder\New.txt"
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
ECHO %filedatetime:~0,-6% >> %destination%

在上面的例子中,我只是使用echo来查看返回的内容,看起来好像返回了日期,但我得到了额外的信息:

  

2012/02/19 02

我想知道如何获得可比较的上述值以及如何正确比较它们。

3 个答案:

答案 0 :(得分:15)

批处理日期要困难得多。

在这种情况下,有一个命令可以使您的工作变得轻松。 FORFILES能够处理自特定日期以来已修改的文件。使用命令行中的FORFILES /?获取有关其使用的文档。

这个简单的命令将列出今天已修改的所有文件:

forfiles /m * /d 0

如果找到至少一个文件,则ERRORLEVEL设置为0,否则ERRORLEVEL设置为1.

您有一个特定的文件,因此您可以使用

forfiles /m %filename% /d 0
if %errorlevel% == 0 (
  echo The file was modified today
  REM do whatever else you need to do
) else (
  echo The file has not been modified today
  REM do whatever else you need to do
)

有一种更简洁的方法可以做到这一点。如果先前命令成功,&&运算符用于有条件地执行命令,如果先前命令失败,则||用于有条件地执行命令。但是,请注意,如果||命令失败,&&命令也会执行。

forfiles /m %filename% /d 0 && (
  echo The file was modified today
  REM do whatever else you need to do
) || (
  echo The file has not been modified today
  REM do whatever else you need to do
)

答案 1 :(得分:10)

我喜欢dbenham's方式,但如果你想让你的代码工作,你可以这样做:

set currentDate=%date%
SET filename="C:\MyFile.txt"

FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
IF %filedatetime:~0, 10% == %currentDate% goto same

goto notsame

:same
echo Dates the same, do some code here

goto next

:notsame
echo Dates NOT the same, do some code here
goto end

:next

认为如果你再次需要它将如何使你的工作是值得的。

答案 2 :(得分:2)

除了文档ForFiles ForFiles Documentation on Microsoft TechNet附加到TechNet文章的评论中提出的问题之外,还有另外一个问题,但前提是您在有关时区被忽略的行之间进行了阅读。由于ForFiles评估以本地时间报告的修改日期,因此它会将在 02:01 EST 修改的文件视为较早而不是在 02:59 EDT修改的文件