当前位置: 移动技术网 > IT编程>网络>Dos/Bat > 用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

2017年12月01日  | 移动技术网IT编程  | 我要评论
核心代码: @echo off :: by oicu#lsxk.org :: 15:17 2011-1-13 :: 如果只是删除指定日期或n天前修改的文

核心代码:

@echo off
:: by oicu#lsxk.org
:: 15:17 2011-1-13

:: 如果只是删除指定日期或n天前修改的文件,用forfiles即可
forfiles /p "c:\测试目录" /s /m *.log /d -3 /c "cmd /c if @isdir==false echo del @file"
:: 指定日期(包含)前修改的文件:/d -yyyy/mm/dd

:: 以下是流水账
:: 使用限制:控制面板里设定日期格式为中文(中国)
:: 只有dir /tc才能查看到文件创建时间,默认dir都是dir /tw
:: 为了取出创建时间,只好用两次for+find,肯定很慢。

cd /d 你的目录
:: 如果要包含子目录,用for /r . %%a in (*)

:: 显示文件修改时间
for %%a in (*) do echo "%%~ta"
:: 中文格式时相当于
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tw "%%a" ^| find /i "%%~nxa"'
) do echo "%%b %%c"

:: 删除某个时间后修改过的文件(这个简单)
for %%a in (*) do if "%%~ta" gtr "2008-04-01" echo del "%%a"

:: 这个才是显示文件创建时间
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"'
) do echo "%%b %%c"

:: 删除某个时间之后创建的文件,如果要删除某个时间之前创建的,更改两
:: 处gtr为lss。除了日期外,增加判断时间,可以去掉else段。
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"') do (
  if "%%b" gtr "2010-12-15" (
    echo del "%%a"
  ) else (
    if "%%b" equ "2010-12-15" if "%%c" gtr "14:50" echo del "%%a"
  )
)

:: 用批处理计算时间受到系统的日期格式限制,影响到用set取某一字段的值,
:: 批处理计算时间方法过于复杂,要么只用vbs脚本删除文件,要么用批处理
:: 配合vbs脚本删除。

:: 取10天之前的日期,取回放入变量olddate
echo wscript.echo dateadd("d",-10,date)>getolddate.vbs
for /f %%a in ('cscript /nologo getolddate.vbs') do set olddate=%%a
echo %olddate%
del getolddate.vbs

:: vbscript里没有format函数,year、month、day等函数取数值后也要处理小
:: 于10的数字,只能用下面的方法整理日期格式
echo wscript.echo dateadd("d",-10,date)>getolddate.vbs
for /f "tokens=1,2,3* delims=-/. " %%i in ('cscript /nologo getolddate.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)
if %m% lss 10 set m=0%m%
if %d% lss 10 set d=0%d%
set olddate=%y%-%m%-%d%
echo %olddate%
del getolddate.vbs


:: 综合上文,最后得到我们想要的结果
:: 删除10天前创建的旧文件(不含子目录)
echo wscript.echo dateadd("d",-10,date)>getolddate.vbs
for /f "tokens=1,2,3* delims=-/. " %%i in ('cscript /nologo getolddate.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)
if %m% lss 10 set m=0%m%
if %d% lss 10 set d=0%d%
set olddate=%y%-%m%-%d%
del getolddate.vbs
for %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"') do (
  if "%%b" lss "%olddate%" echo del "%%a"
)

:: 删除10天前修改的旧文件(不含子目录)
echo wscript.echo dateadd("d",-10,date)>getolddate.vbs
for /f "tokens=1,2,3* delims=-/. " %%i in ('cscript /nologo getolddate.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)
if %m% lss 10 set m=0%m%
if %d% lss 10 set d=0%d%
set olddate=%y%-%m%-%d%
del getolddate.vbs
for %%a in (*) do if "%%~ta" lss "%olddate%" echo del "%%a"


:: 本文全部用echo del代替del,只是显示要删除的文件,并不实际删除。

pause
goto :eof

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网