📅  最后修改于: 2023-12-03 15:39:43.549000             🧑  作者: Mango
在计算机中,经常会遇到需要定时清理一些临时文件或日志文件的情况。这时就可以使用批处理脚本来实现自动清理。
本篇文章将介绍如何使用批处理脚本删除超过 30 天的文件。
首先,我们需要创建一个批处理脚本。打开文本编辑器,输入以下内容:
@echo off
setlocal
set "folder=%~1"
if not defined folder set "folder=%cd%"
for /f "delims=" %%i in ('dir /b /a-d "%folder%" ^| findstr /r /c:"^[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*.\{3\}$" 2^>nul') do (
for /f "usebackq delims=" %%d in (`echo prompt $D ^| cmd`) do set "defaultdate=%%d"
for /f "usebackq delims=" %%d in (`echo %defaultdate%`) do set "timestamp=%%d"
set "filedatetime=%%~ti"
set "filedatetime=!filedatetime: =_!"
setlocal enabledelayedexpansion
set "filedatetime=!filedatetime:,=!"
set "filedatetime=!filedatetime:~0,14!"
if "!timestamp:~0,14!" gtr "!filedatetime!" (
set "filename=%folder%\%%i"
echo del /q "!filename!"
)
endlocal
)
endlocal
在第 4 行,我们设置了要清理的文件夹。如果没有指定文件夹,则默认为当前目录。
set "folder=%~1"
if not defined folder set "folder=%cd%"
在第 6 行,我们使用 dir
命令列出了指定目录下的所有文件名(排除目录名),然后使用 findstr
命令筛选出符合条件的文件。
for /f "delims=" %%i in ('dir /b /a-d "%folder%" ^| findstr /r /c:"^[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*_[0-9][0-9]*.\{3\}$" 2^>nul') do (
这里我们使用了一个正则表达式,来匹配指定格式的文件名,例如:20190526_080000.log。
我们可以根据实际需求来修改这个正则表达式。
在第 12 行,我们设置了文件的最长保留时间,这里是 30 天。
if "!timestamp:~0,14!" gtr "!filedatetime!" (
保存文件时,将其命名为 cleanup.bat
或者其他你喜欢的名字。
打开命令行窗口,进入包含脚本的目录,然后运行:
cleanup.bat <要删除的目录>
例如:
cleanup.bat "C:\Users\user\Desktop\log"
在命令行窗口中,你将看到脚本输出清理的文件名,例如:
C:\Users\user\Desktop\log\20190526_080000.log
C:\Users\user\Desktop\log\20190525_080000.log
C:\Users\user\Desktop\log\20190524_080000.log
如果你确认脚本操作的正确性,可以将第 19 行中的 echo
命令删除,脚本将真正删除文件。
echo del /q "!filename!"
使用批处理脚本删除超过 30 天的文件非常简单,只需要几步操作就可以完成。你可以根据实际需求来修改脚本,例如修改保留时间、修改文件格式等。祝你使用愉快!