只是为了看看我是否可以,我拼凑了一些 sumn sumn 来删除超过 30 天的文件而不使用forfiles
. 确保该pushd
行设置为转到相应的目录。我2592000
通过从 2013 年 1 月 31 日减去 01/01/2013 得到。
@echo off
setlocal enabledelayedexpansion
pushd "D:\SQL Database Back Ups\Update_FmlaManagement_Log"
set today=%date:~-10%
call :toEpoch %today%
set /a thirtyDaysAgo=%epoch% - 2592000
for /f "tokens=1,5*" %%I in ('dir /o:d *.txt ^| findstr "txt$"') do (
call :toEpoch %%I
if "%%K"=="" (set file=%%J) else (set file=%%J %%K)
if /i %thirtyDaysAgo% GTR !epoch! del /q "!file!"
)
popd
goto :EOF
:toEpoch date
echo wscript.echo datediff("s", "01/01/1970 00:00:00", "%1")>epoch.vbs
for /f %%x in ('cscript /nologo epoch.vbs') do set epoch=%%x
del /q epoch.vbs
goto :EOF
(从Cameron Oakenleaf借来的 VBscript 。)
诚然,这不会像痴迷一样准确地工作。例如,如果一个日志文件最后一次修改是在 30 天前的中午,而您在上午 8:00 运行它,那么该文件可能会被删除,即使它还有 4 个小时才能达到 30 天。而且它可能不如 forfiles.exe 高效。
*shrug*
这是一条少有人走的路,我走过了。
编辑: HerbCSO 有另一个可能更好的实现,它使我的看起来像一个 Rube Goldberg-ian 解决方案。