问题描述
能否请您帮我提供一个批处理文件命令,以删除带有文件名的文件。
我需要根据文件名删除6个月以上的文件。我需要在任务计划程序中计划脚本,因此它将根据文件名删除每天从当前日期开始超过6个月的特定位置的文件。
文件位置:
K:\Bck
文件名:
Backup_2020-10-22.txt
Backup_2020-10-21.txt
Backup_2019-09-16.txt
Backup_2018-05-17.txt
Backup_2017-04-16.txt
解决方法
这是Aacini's
帖子的修改版本,最早于2013年。我仅对其进行了修改,以使用powershell
来获取今天的日期,而不是使用特定于语言环境的%date%
变量和进行一些更改以适应您的环境。因此,我对此一无所知。
@echo off
setlocal EnableDelayedExpansion
pushd "K:\Bck"
for /f "tokens=*" %%i in ('PowerShell -Command "& {Get-Date -format 'yyyyMMdd'}"') do set todayDate=%%i
call :DateToJDN %todayDate% todayJDN=
for /F "tokens=1-4* delims=_-" %%a in ('dir /B /A-D "Backup_*-*-*.txt"') do (
call :DateToJDN %%b%%c%%~nd fileJDN=
set /A daysOld=todayJDN - fileJDN
if !daysOld! gtr 180 (
echo File "%%a_%%b-%%c-%%d" is !daysOld! days old
del "%%a_%%b-%%c-%%d" /Q
)
)
popd
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
的结果与您想要的结果相似,则可以从echo
行中删除echo del "%%a_%%b_%%c_%%d" /Q
您还需要相应地在if !daysOld! gtr 180 (
行中设置您的日子