Comparing a modified file date with the current date in a batch file

天大地大妈咪最大 提交于 2019-12-03 18:36:09

问题


I'm required to write a batch file to do a few things

Initially I thought my problem was very simple - capture the modified date of a txt file located in a specified directory, compare that date to the current date and if they are the same do something. If they are not then do something else.

The line I use to capture the current date is:

%date%

The lines I use to capture the modified date of my specified file is:

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

In the above case I'm simply using echo to see what is returned and it seems as if the date is returned but I get extra information:

2012/02/19 02

I would like to know how to get the above values where they are comparable as well as how to compare them properly.


回答1:


I like dbenham's way, but if you want to make your code work you can do like this:

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

Thought it would be worth knowing how to make yours work just in case you need it again.




回答2:


Working with dates is much harder in batch then it ought to be.

There is one command that can make your job easy in this case. FORFILES has the ability to process files that have been modified since a particular date. Use FORFILES /? from the command line to get documentation on its use.

This simple command will list all files that have been modified today:

forfiles /m * /d 0

If at least one file is found, then ERRORLEVEL is set to 0, else ERRORLEVEL is set to 1.

You have a specific file, so you can use

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
)

There is a more concise way to do the above. The && operator is used to conditionally execute commands if the prior command was successful, || is used to conditionally execute commands if the prior command failed. However, be careful, the || commands will also execute if the && command(s) failed.

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
)



回答3:


Apart from the issues raised in the comments appended to the TechNet article that documents ForFiles ForFiles Documentation on Microsoft TechNet, there is another issue that is mentioned, but only if you read between the lines regarding time zone being ignored. Since ForFiles evaluates the Modified date reported in Local time, it will treat a file modified at 02:01 EST as older than a file modified at 02:59 EDT.



来源:https://stackoverflow.com/questions/9349815/comparing-a-modified-file-date-with-the-current-date-in-a-batch-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!