在Windows计算机(赢7或赢服务器2008 R2)我有一个批处理脚本,复制一些.config文件到备份文件夹。
我想写另一个脚本删除一个星期前创build的备份文件。
有很多关于如何使用FORFILES
的build议(例如):
FORFILES /P "D:\Configs_Backup" /M *.config /D -7 /C "cmd /c del @file"
但是这个命令使用“修改”时间戳,而我需要使用创builddate。
没有安装任何第三方程序,是否可以通过命令控制台来实现?
尝试这个,看看输出,并删除echo
,如果它看起来不错:
@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION SET /a XDay=7 CALL :DateToJDN "%DATE%" JDNToday FOR /r "D:\Configs_Backup" %%a IN (*.config) DO ( FOR /f "tokens=1,4*" %%b IN ('dir /tc "%%~a"^|findstr "^[0-9]"') DO ( CALL :DateToJDN "%%b" filedate SET /a diffdays=JDNToday-filedate IF !diffdays! gtr %XDay% ECHO DEL /F /Q "%%~a" ) ) GOTO :eof :DateToJDN "DD mm/dd/yyyy" jdn= setlocal set date=%~1 set /A yy=%date:~-4%, mm=1%date:~-10,2% %% 100, dd=1%date:~-7,2% %% 100 set /A a=mm-14, jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075 endlocal & set %2=%jdn% exit /B
注意:这仅适用于AM/PM
时间格式。
看看是否有帮助 – 保留5 * .config文件(skip = 5)与最近的创建日期
在示例文件上进行测试。
@echo off pushd "d:\folder" del file2.tmp 2>nul for /f "delims=" %%a in ('dir *.config /b /ad ') do call :getcreationdate "%%~fa" sort /r <file2.tmp >file.tmp for /f "skip=5 tokens=1,*" %%a in (file.tmp) do del "%%~b" del file.tmp file2.tmp popd pause goto :EOF :getcreationdate set "file=%~1" set "file=%file:\=\\%" WMIC DATAFILE WHERE name="%file%" get creationdate | find "." >file.tmp for /f %%b in (file.tmp) do set dt=%%b set dt=%dt:~0,8%_%dt:~8,6% del file.tmp >>file2.tmp echo %dt% "%~1"