Board logo

标题: 怎样用批处理删除7天前的文件 [打印本页]

作者: lilankui     时间: 2006-9-8 10:50    标题: 怎样用批处理删除7天前的文件

@echo
Rem 取7天之前的日期,取回放入变量nowdate
echo wscript.echo dateadd("d",-6,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
set nowdate=%y%-%m%-%d%
我想知道for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
这几句怎么解释,哪位高手可告诉我
作者: 9527     时间: 2006-9-8 22:11
对于日期的操作要考虑的太多了,至少用批处理是这样,回LZ 他是结合VBS脚本和批处理来完成的,代码没有测试,准备写一个关于这样的批处理,要考虑的实在是太多了,呵呵................
作者: linqlou     时间: 2006-11-25 13:34
求完整代码!!
作者: redtek     时间: 2006-11-25 21:31
测试了一下上面的原理代码:)

  Quote:

  1. C:\TEMP\Q 取日期>type d.vbs
  2. wscript.echo dateadd("d",-6,date)
  3. wscript.echo date

  4. C:\TEMP\Q 取日期>cscript /nologo d.vbs
  5. 2006-11-19
  6. 2006-11-25

  7. C:\TEMP\Q 取日期>echo %date%
  8. 2006-11-25 星期六

  9. C:\TEMP\Q 取日期>date
  10. 当前日期: 2006-11-25 星期六
  11. 输入新日期: (年月日)
        2006-11-25  08:31

测试系统的版本:
名称:     WindowsServer 2003, Enterprise Edition
版本:     5.2 内部版本 3790

作者: 不得不爱     时间: 2006-11-25 22:28
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j其实可以改为:
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do (set y=%%i
set m=%%j
set m=%%j)
作者: vkill     时间: 2006-11-25 23:38
forfiles /p "d:\test" /s /m *.* /d -7 /c "cmd /c del @path"

03里面的命令,不过是最后修改的时间,要创建时间还是for + dir 好

[ Last edited by vkill on 2006-11-25 at 11:53 PM ]
附件 1: forfiles.rar (2006-11-25 23:52, 20.73 K, 下载附件所需积分 1点 ,下载次数: 123)

作者: redtek     时间: 2006-11-26 00:27
帮vkill兄贴上 FORFILES 的帮助,很方便的工具~:)
Windows Server 2003系统自带:)
FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

描述:
    选择一个文件(或一组文件)并在那个文件上
    执行一个命令。这有助于批处理作业。

参数列表:
    /P    pathname      表示开始搜索的路径。默认文件夹是当前工作的
                        目录 (.)。

    /M    searchmask    根据搜索掩码搜索文件。默认搜索掩码是 '*'。

    /S                  指导 forfiles 递归到子目录。像 "DIR /S"。

    /C    command       表示为每个文件执行的命令。命令字符串应该
                        用双引号括起来。

                        默认命令是 "cmd /c echo @file"。下列变量
                        可以用在命令字符串中:
                        @file    - 返回文件名。
                        @fname   - 返回不带扩展名的文件名。
                        @ext     - 只返回文件的扩展。
                        @path    - 返回文件的完整路径。
                        @relpath - 返回文件的相对路径。
                        @isdir   - 如果文件类型是目录,返回 "TRUE";
                                   如果是文件,返回 "FALSE"。
                        @fsize   - 以字节为单位返回文件大小。
                        @fdate   - 返回文件上一次修改的日期。
                        @ftime   - 返回文件上一次修改的时间。

                        要在命令行包括特殊字符,字符请以 0xHH
                        形式使用十六进制代码(例如,0x09 为 tab)。
                        内部 CMD.exe 命令前面应以 "cmd /c" 开始。

    /D    date          选择文件,其上一次修改日期大于或等于 (+),
                        或者小于或等于 (-) 用 "yyyy-MM-dd" 格式指定的日期;
                        或选择文件,其上一次修改日期大于或等于 (+)
                        当前日期加 "dd" 天,或者小于或等于 (-) 当前
                        日期减 "dd" 天。有效的 "dd" 天数可以是
                        0 - 32768 范围内的任何数字。如果没有指定,
                        "+" 被当作默认符号。

    /?                  显示帮助消息。

例如:
    FORFILES /?
    FORFILES  
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 在 30 前就被更改。"
    FORFILES /D 2001-01-01
             /C "cmd /c echo @fname 在 2001年1月1日就是新的。"
    FORFILES /D +2006-11-25 /C "cmd /c echo @fname 今天是新的。"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
[ Last edited by redtek on 2006-11-25 at 11:28 AM ]
作者: wenjia     时间: 2007-3-14 23:41
adsfsdf
作者: edgeos     时间: 2007-6-6 11:25
正好解决我的问题,谢谢诶!
作者: qq43142691     时间: 2007-6-6 16:57
:: DateDel2.bat - 删除指定路径下指定日数以前修改的文件
:: Will Sort - 2005-9-2 - CMD@WinXP
:: 注意事项:参数%1指定日数,昨天为1,前天为2,依次类推
::           参数%1指定文件路径,省略时将处理当前路径
:: 核心算法:Ritchie Lawrence, updated 2002-08-13. Version 1.1
:: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=16676

@echo off & setlocal ENABLEEXTENSIONS
call :Date2Day %date:~0,10% sdays
set /a sdays-=%1
call :Day2Date %sdays% difdate
echo 将删除 %cd% 下 %difdate% 前的修改的以下文件:
for /r %2 %%f in (*.*) do if "%%~tf" LEQ "%difdate%" echo "%%f"
goto :EOF

:Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  set yy=%%a & set mm=%%b & set dd=%%c
)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %2=%j%&goto :EOF

:Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
作者: ways1204     时间: 2007-10-25 16:55
我要下载啊
作者: wangyang0215     时间: 2007-12-20 14:23    标题: 好帖啊

好帖啊
作者: egx2000     时间: 2007-12-20 17:04


  Quote:
Originally posted by qq43142691 at 2007-6-6 04:57 PM:
:: DateDel2.bat - 删除指定路径下指定日数以前修改的文件
:: Will Sort - 2005-9-2 - CMD@WinXP
:: 注意事项:参数%1指定日数,昨天为1,前天为2,依次类推
::    ...

这个脚本只能在纯DOS下用吗?win2003怎么提示没有操作数的?
作者: qzwqzw     时间: 2007-12-20 19:59
从注释上看来03下没有问题
问题通常出在命令行参数上
仔细检查一下传递的参数是否按照要求
作者: asasd     时间: 2007-12-29 13:30
先下来试试看
作者: yke2000     时间: 2008-1-4 22:07
嫌我穷积分不够?还不让下载
作者: piaoyaoxun     时间: 2008-1-5 00:28
我也想下载,可是怎么样才能有积分呀
作者: Kinkai     时间: 2008-4-23 14:56
荣誉版主,我这个试验了,在中文的日期显示环境中是可以正确的算出时间的,但是在英文的日期显示环境里就不可以了。现在在看你的代码,想看懂了,写个。
作者: Kinkai     时间: 2008-4-23 14:57


  Quote:
Originally posted by qq43142691 at 2007-6-6 04:57 PM:
:: DateDel2.bat - 删除指定路径下指定日数以前修改的文件
:: Will Sort - 2005-9-2 - CMD@WinXP
:: 注意事项:参数%1指定日数,昨天为1,前天为2,依次类推
::    ...

荣誉版主,我这个试验了,在中文的日期显示环境中是可以正确的算出时间的,但是在英文的日期显示环境里就不可以了。现在在看你的代码,想看懂了,写个。
作者: yiyuncao007     时间: 2008-7-2 14:08
FORFILES 可以在XP中能用吗
作者: yiyuncao007     时间: 2008-7-2 14:10
不管能用否,先收了在说
作者: yuehong     时间: 2008-7-16 11:06
FORFILES 不错,不过不能在2000下面使用!!!
作者: zzyy1919     时间: 2010-7-1 18:42
FORFILES 不错
作者: dooomer     时间: 2010-7-1 23:34
大家的机子上基本都装有winrar吧?winrar附带了个命令行版本,叫做rar,支持将早于或者晚于某个特定时间点的文件打包,然后可以自动将源文件删除。再在批处理中用delete命令将生成的rar包裹删除掉,就可以了。
作者: ddddwee     时间: 2010-8-10 18:54    标题: 好好

谢谢谢
作者: ppkspk     时间: 2010-8-11 21:59
ddd
作者: qinanzong     时间: 2010-8-13 10:41
用到了FORFILES,我对这个命令还不太熟悉,瞧瞧去
作者: cxbstc     时间: 2010-8-16 09:52
我正在找這個!