标题: 怎样用批处理删除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: |
- C:\TEMP\Q 取日期>type d.vbs
- wscript.echo dateadd("d",-6,date)
- wscript.echo date
- C:\TEMP\Q 取日期>cscript /nologo d.vbs
- 2006-11-19
- 2006-11-25
- C:\TEMP\Q 取日期>echo %date%
- 2006-11-25 星期六
- C:\TEMP\Q 取日期>date
- 当前日期: 2006-11-25 星期六
- 输入新日期: (年月日)
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
我正在找這個!