MS Dos批处理删除目录中的旧文件

4

可能重复:
批处理文件删除N天前的文件

我正在尝试制作一个DoS批处理文件,遍历一个包含大约50万个文件的目录,并且我希望它能够删除所有1年前的文件。

这是我的目前的代码:

@echo off
title File Exclusion Act
for /f "usebackq delims=|" %%f in (`dir /b "C:\Users\Travis\Desktop\LotsOfFiles"`) do echo %%f
pause

到目前为止,它循环并打印指定目录中的所有文件。

非常感谢任何提示/帮助。


1
请查看此线程 https://dev59.com/EHVD5IYBdhLWcg3wNY1Z - codechurn
2
@Art:我已经审查了那个线程,以及其中所有层次提到的线程,并且只发现了一个(不太有效)基于DOS批处理的解决方案,它没有使用FORFILES... - Aacini
1个回答

3
以下批处理文件必须根据要删除的旧文件与今天之间的天数进行调用。例如,使用365来删除1年前的文件。
@echo off
setlocal EnableDelayedExpansion
call :DateToJDN %date% oldDate= -%1
for /F "skip=5 tokens=1-4*" %%a in ('dir /A:-D /O:D') do (
   call :DateToJDN %%a fileDate=
   if !fileDate! lss %oldDate% (
      del "%%e"
   ) else (
      goto :EOF
   )
)
goto :EOF

:DateToJDN Date JDN= [+-days]
for /F "tokens=1-3 delims=/" %%x in ("%1") do set /A mm=10%%x %% 100, dd=10%%y %% 100, yy=%%z
if %mm% lss 3 set /A mm+=12, yy-=1
set /A a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10, %2=C+DD+E+F-1524%3
exit /B

如果您的日期格式不是MM/DD/YYYY,请在:DateToJDN子程序的第一行重新排列mm、dd和yy变量。

无法运行此程序。在if !fileDate! lss %oldDate%处出现“缺少操作数。命令的语法不正确。”的错误提示。 - One-One

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接