0

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

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

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

编辑 :

  • FORFILES 命令非常适合这项工作(但唯一的缺点是它以“修改日期”作为参考)
  • Aacini 下面的脚本在调整到规范后运行良好。
  • 由于其他条件使整个场景进一步复杂化,我们决定放弃批处理并在 Powershell 或 AutoIT 中进行。

谢谢!。

4

2 回答 2

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

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

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

于 2013-05-18T03:29:41.260 回答
0

在这里,它将在 1 月 5 日删除文件,例如 20180105.log,它使用日期格式 YYYY-MM-DD,对于日期格式 MM/DD/YYYY,更改此 delims=/ 并检查“echo todayDate!todayDate!” 用于操作 abc

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.%%bdel %%a.%%b

于 2018-01-05T19:02:03.913 回答