删除使用创建日期超过1天/ 24小时的所有文件



我想使用操作系统中的定时任务和批处理文件删除所有超过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 FOLDERfilename_%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号,而创建是在一个小时前…

是否有一种方法可以规避这种行为并使用创建日期来代替?

或者,是否有一种方法可以将修改日期设置为复制文件后的某个时间戳?

我能够通过使用来自dbenham: http://www.dostips.com/forum/viewtopic.php?f=3&t=4847&p=27422#p27422的getTimestamp.bat来解决这个问题

这是我能找到的唯一能够计算昨天(可能是任何一天)日期的批处理文件。

它可能是唯一工作的一个,因为所有其他人(以及所有在关于StackOverflow线程中链接的人)都不考虑区域设置,所以他们甚至没有为我开始。

call getTimeStamp -od -1 -f {dd}.{mm}.{yyyy} -r dt
rem Copy file including timestamp
xcopy "\uncfolderfileToBackup.accdb" "\uncfolderbackupedFile_%date%_%TIMESTAMP%.accdb*" /Y
rem Delete yesterdays file
del "\uncfolderbackupedFile_%dt%_%TIMESTAMP%.accdb*"

可能有点"复杂"但是应该可以了

@echo off
    setlocal enableextensions disabledelayedexpansion
    set "folder=\serversharesomewhere"
    for /f "tokens=*" %%a in (
        'robocopy "%folder%" "%folder%" /l /nocopy /is /minage:1 /njh /njs /ndl /ns /nc /fp'
    ) do echo del "%%a"

del命令回显到控制台。如果显示正确,则删除echo命令

使用robocopy命令在UNC路径下搜索需要的文件。所以,原生的,只适用于vista和以后的操作系统。对于XP, Windows 2003资源工具包工具包括一个工作版本的robocopy。

编辑-还有一个。试图避免在文件

上使用时间戳
@echo off
    setlocal enableextensions disabledelayedexpansion
    set "folder=\serversharesomewhere"
    for /f "tokens=* skip=24" %%a in (
        'dir /b /a-d /tc /o-d "%folder%"'
    ) do echo del "%folder%%%a"

每小时生成一个文件,保留最后24个,删除其余的

forfiles确实使用修改的时间戳,而不是创建的时间戳,因此您不能将其用于您想要的内容。

你可能想检查这个问题的答案解析文件创建日期的批处理脚本,或者如果你愿意使用PowerShell,那么你可以尝试这个脚本与参数-CreateTime选项。

最新更新