|
|
本帖最后由 tianshiguodong 于 2011-12-23 14:32 编辑
由于我的文件名比较不规则,在使用以下批处理脚本时,无法确切判断时间,所以导致文件被错误删除,如我要删除一天前的文件,但我的的文件中有11_2011123119120303.txt,使用此脚本判断时就出现将19120303判断为日期并删除。我想可以通过在循环中加入截取时间字符串的操作后再判断,但不知如何加,还请各位指点下
另外我的文件规则是11_20111111*.txt和12_20111111*.txt类似这样的文件,*为长度固定的数字格式
@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
rem 指定待删除文件的存放路径
set SrcDir=F:\201221test\smppbillstore
rem 指定天数
set DaysAgo=1
>"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%/DstDate.vbs"') do (
set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4% ^& %DstDate:~4,2% ^& %DstDate:~6,2%
setlocal enabledelayedexpansion
for /r "%SrcDir%" %%a in (*.*) do (
set "FileDate=%%~na"
set "FileDate=!FileDate:~4,10!"
if "!FileDate!" leq "%DstDate%" (
if exist "%%a" (
echo del /f /q "%%a"
)
)
)
endlocal
pause |
|