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

Posted

技术标签:

【中文标题】将修改后的文件日期与批处理文件中的当前日期进行比较【英文标题】:Comparing a modified file date with the current date in a batch file 【发布时间】:2012-03-10 03:01:04 【问题描述】:

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

最初我认为我的问题很简单 - 捕获位于指定目录中的 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

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

【问题讨论】:

【参考方案1】:

批量处理日期比它应该的要困难得多。

在这种情况下,有一个命令可以让您的工作变得轻松。 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
)

【讨论】:

这很好用,但是有什么方法可以让它生成的输出静音吗? @pcnate - 当然,只需将标准输入和标准错误重定向到 NUL。 forfiles /m %filename% /d 0 >nul 2>nul ... @dbenharm 谢谢。看起来这仅在 /d - nn 与修改日期匹配时才有效。任何可能的方式来匹配比/d - nn 更新的任何东西? 我为这个***.com/questions/30620330/…开了一个新问题【参考方案2】:

我喜欢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

认为如果您再次需要它,了解如何使您的工作正常工作是值得的。

【讨论】:

这可能并不总是有效 - 它不在我的机器上,因为 %date% 以星期几为前缀。日期格式会根据语言环境而变化,这是使日期变得困难的原因之一。在给定的机器上做某事通常很容易,但一般的解决方案通常很困难。 确实如此。我更喜欢你的回答。很高兴知道星期几的事情,非常随机。 这就像一个魅力。你刚刚救了我一个**免于被踢:) 添加了对日期前缀的修复。 SET d=%date% SET Day=%d:~7,2% SET Month=%d:~4,2% SET Year=%d:~10,4% REM 更改/到 - 或作为您的区域设置。 SET currentDate=%Month%/%Day%/%Year%【参考方案3】:

除了在记录 ForFiles ForFiles Documentation on Microsoft TechNet 的 TechNet 文章所附的 cmets 中提出的问题之外,还有另一个问题被提及,但前提是您阅读了有关忽略时区的字句之间的内容。由于 ForFiles 评估以当地时间报告的修改日期,它会将在 02:01 EST 修改的文件视为02:59 EDT 修改的文件

【讨论】:

以上是关于将修改后的文件日期与批处理文件中的当前日期进行比较的主要内容,如果未能解决你的问题,请参考以下文章

请教批处理大虾,如何将一堆不同时期拍摄的照片按修改日期自动创建文件夹进行归档?

如何在 Go 中获取文件的最后访问日期和时间?

我如何将当前日期与日期选择器中的用户输入日期进行比较

有没有办法将当前日期与以 VARCHAR 格式存储在数据库中的日期进行比较?

通过将日期索引与当前日期进行比较来删除集合中的所有文档

将日期和时间与 MySQL 中的当前时间进行比较