我现在有一个看似无害的要求放在一个.bat文件中,我第一次处理批处理代码...找到一个页面here处理类似的东西,但需要修改日期作为参考。
在特定文件夹X中,通过解析文件名删除超过N天的所有文件。 其中文件名格式为Name_YYYYMMDD.log
但请注意: 1.不希望上次修改日期作为参考(日志可能已被其他程序/应用程序访问/修改) 2.无权安装其他实用程序。
编辑:
谢谢!
答案 0 :(得分:4)
下面的批处理文件将文件日期转换为Julian Day Number,这是一个连续的天数,并用它来知道每个天的天数。删除文件的天数在参数中给出。
@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"
命令。
答案 1 :(得分:0)
在这里,它将删除文件,例如20180105.log于1月5日开始,正在使用日期格式YYYY-MM-DD, 对于日期格式MM / DD / YYYY更改此delims = /并选中“echo todayDate!todayDate!”用于操纵b c
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.%%b
更改为del %%a.%%b