批处理文件逻辑可根据文件名中的日期删除文件

spy*_*_42 0 batch-file

我现在有一个看起来无害的要求放在.bat文件中,我是第一次处理批处理代码...在这里找到一个处理类似内容的页面 ,但它以修改后的日期为参考。

在特定的文件夹X中,通过解析文件名删除所有早于N天的文件。其中文件名格式为Name_YYYYMMDD.log

但是请注意:1.不想以上次修改日期作为参考(其他程序/应用可能已访问/修改了日志)2.没有安装其他实用程序的权限。

编辑:

  • FORFILES命令可以很好地完成此工作(但唯一的缺点是它以“修改日期”为参考)
  • 将Aacini的以下脚本调整为规格后,可以正常工作。
  • 由于其他条件使整个方案更加复杂,我们决定放弃批处理,而在Powershell或AutoIT中进行处理。

谢谢!。

Aac*_*ini 5

下面的批处理文件将文件日期转换为儒略日数,即连续的天数,并使用它来知道每一天的天数。参数中提供了删除文件的天数。

@echo off
setlocal EnableDelayedExpansion

rem Get Julian Day Number of today's date
rem The assumed format is MM/DD/YYYY, change C-A-B order in accordance with your locale
for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
   set todayDate=%%c%%a%%b
)
call :DateToJDN %todayDate% todayJDN=

for /F "tokens=1-3 delims=_." %%a in ('dir /B /A-D *.*') do (
   call :DateToJDN %%b fileJDN=
   set /A daysOld=todayJDN - fileJDN
   if !daysOld! gtr %1 (
      echo File "%%a_%%b.%%c" is !daysOld! days old
   )
)
goto :EOF

:DateToJDN yyyymmdd jdn=
set yyyymmdd=%1
set /A yyyy=%yyyymmdd:~0,4%, mm=1%yyyymmdd:~4,2% %% 100, dd=1%yyyymmdd:~6% %% 100
set /A a=(mm-14)/12, %2=(1461*(yyyy+4800+a))/4+(367*(mm-2-12*a))/12-(3*((yyyy+4900+a)/100))/4+dd-32075
exit /B
Run Code Online (Sandbox Code Playgroud)

测试此程序,并echo File "%%a_%%b.%%c" ...根据需要更改命令del "%%a_%%b.%%c"

参考:http//www.hermetic.ch/cal_stud/jdn.htm#comp