MS Dos Batch删除目录中的旧文件[重复]

Posted

技术标签:

【中文标题】MS Dos Batch删除目录中的旧文件[重复]【英文标题】:MS Dos Batch delete old files in directory [duplicate] 【发布时间】:2012-03-17 02:38:24 【问题描述】:

可能重复:Batch file to delete files older than N days

我正在尝试制作一个 DoS 批处理文件以通过一个包含大约 500,000 个文件的目录,我希望它删除所有早于 1 年的文件

这是我目前的代码

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

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

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

【问题讨论】:

请看这个帖子***.com/questions/51054/… @Art:我查看了那个线程,以及它在所有级别中提到的所有线程,并且刚刚找到了一个(不是很有效)基于 DOS 批处理的解决方案,它不使用 FORFILES... 【参考方案1】:

必须使用从今天开始删除旧文件的天数调用下面的批处理文件。例如,使用 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

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

【讨论】:

无法运行。获取Missing operand. The syntax of the command is incorrect.if !fileDate! lss %oldDate%

以上是关于MS Dos Batch删除目录中的旧文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux命令-磁盘管理-mrdmzippwd命令详解

DOS常用命令

bat文件命令大全

DOS - for

DOS常见命令

dos 下删除文件文件夹