【发布时间】:2014-03-28 10:45:57
【问题描述】:
我想使用操作系统中的定时任务和批处理文件删除所有早于 1 天/24 小时的文件。
这是我实现的简单备份机制所必需的,它每小时保存一个特定文件,我不想手动删除旧文件。
我已经实现了以下批处理代码,它每小时成功创建一个备份。但是,代码的删除部分似乎不起作用。
有人对原因有什么建议吗?
PS:我使用的是 Win7 x64。
代码:
rem Get day of week
SETLOCAL enabledelayedexpansion
SET /a count=0
FOR /F "skip=1" %%D IN ('wmic path win32_localtime get dayofweek') DO (
if "!count!" GTR "0" GOTO next
set dow=%%D
SET /a count+=1
)
:next
rem Check if day of week is Saturday or Sunday. If so, goto end of file.
if %dow% == 6 GOTO eof
if %dow% == 7 GOTO eof
rem Set hour
set TIMESTAMP=%TIME:~0,2%"Uhr"
rem Copy file including timestamp
xcopy "SOURCE FOLDER" "TARGET FOLDER\filename_%date%_%TIMESTAMP%.accdb*" /Y
rem Delete files older than 1 day
forfiles -p "TARGET FOLDER (from above)" -s -m *.* /D -1 /C "cmd /c del @path"
:eof
编辑:
我找到了原始问题的原因,它是 UNC 路径。我现在没有使用它们,而是将路径映射到驱动器号,现在删除工作正常。
但是,它现在会删除我的所有文件,而不仅仅是超过 1 天的文件。
我怀疑 forfiles 使用最后修改日期而不是创建日期,因为最后修改仍然是 26 日,而创建时间就像一个小时前...
有没有办法规避这种行为并改用创建日期?
或者,有没有办法在复制文件后将修改日期设置为某个时间戳?
【问题讨论】:
-
注意!
forfiles /D仅查找日期,而不是时间。因此,如果您在午夜后不久运行它,它可能会处理仅 10 分钟前的文件。只是提一下,因为您写的是早于 1 天/24 小时。 -
啊,我想我找到了原因... Forfiles 显然不支持 UNC 路径 -.- 你知道吗?写什么而不是 /D ?
-
只是一个问题。您是否确实需要删除超过 24 小时的文件,或者删除不是当天的文件就足够了?如果可以选择第二种情况,请删除日期与今天不同的所有文件。
-
我想备份最后 24 小时,所以是的,我需要删除所有早于 24 小时的内容
标签: windows batch-file command-line cmd delete-file