我需要编写一个批处理文件来做一些事情
最初我认为我的问题非常简单 - 捕获位于指定目录中的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
我想知道如何获得可比较的上述值以及如何正确比较它们。
答案 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修改的文件强>