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

时间:2013-05-17 16:12:11

标签: batch-file

我现在有一个看似无害的要求放在一个.bat文件中,我第一次处理批处理代码...找到一个页面here处理类似的东西,但需要修改日期作为参考。

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

但请注意: 1.不希望上次修改日期作为参考(日志可能已被其他程序/应用程序访问/修改) 2.无权安装其他实用程序。

编辑:

  • FORFILES命令非常适合这项工作(但唯一的缺点是需要修改日期'作为参考)
  • Aacini下面的脚本在调整到规格后工作正常。
  • 由于其他条件使整个方案更加复杂化,我们决定放弃批处理并在Powershell或AutoIT中执行此操作。

谢谢!

2 个答案:

答案 0 :(得分:4)

下面的批处理文件将文件日期转换为Julian Day Number,这是一个连续的天数,并用它来知道每个天的天数。删除文件的天数在参数中给出。

@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

测试此程序并使用所需的echo File "%%a_%%b.%%c" ...更改del "%%a_%%b.%%c"命令。

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

答案 1 :(得分:0)

在这里,它将删除文件,例如20180105.log于1月5日开始,正在使用日期格式YYYY-MM-DD, 对于日期格式MM / DD / YYYY更改此delims = /并选中“echo todayDate!todayDate!”用于操纵b c

cls
@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-3 delims=-" %%a in ("%date%") do (
   set todayDate=%%a%%b%%c
)

rem echo todayDate !todayDate!

for /F "tokens=1-3 delims=_." %%a in ('dir /B /A-D *.*') do (

   set /A daysOld=todayDate - "%%a"

   if !daysOld! EQU 0 (
      echo deleting.. %%a.%%b
      echo del %%a.%%b
   )
)

测试并将echo del %%a.%%b更改为del %%a.%%b