中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 18:58
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样用批处理删除7天前的文件
楼 主 怎样用批处理删除7天前的文件 发表于 2006-09-08 10:50 ·  中国 广东 东莞 电信
新手上路
积分 6
发帖 1
注册 2006-09-05 10:48
UID 61890
性别 男
来自 江西
状态 离线
@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
这几句怎么解释,哪位高手可告诉我
2 发表于 2006-09-08 22:11 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
UID 61449
来自 北京
状态 离线
对于日期的操作要考虑的太多了,至少用批处理是这样,回LZ 他是结合VBS脚本和批处理来完成的,代码没有测试,准备写一个关于这样的批处理,要考虑的实在是太多了,呵呵................
我今后在论坛的目标就是做个超级坏人!!!
3 发表于 2006-11-25 13:34 ·  中国 福建 泉州 石狮市 电信
初级用户
积分 32
发帖 14
注册 2006-11-22 12:05
UID 71377
性别 男
状态 离线
求完整代码!!
4 发表于 2006-11-25 21:31 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
测试了一下上面的原理代码:)



  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
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
5 发表于 2006-11-25 22:28 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
UID 42843
性别 男
来自 四川南充
状态 离线
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)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
redtek +1 2006-11-26 00:27
6 发表于 2006-11-25 23:38 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
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 条) 点击查看详情
评分人分数时间
redtek +1 2006-11-26 00:28
附件
forfiles.rar (20.73 KiB, 下载附件所需积分 1 点, 下载次数: 123)
7 发表于 2006-11-26 00:27 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
帮vkill兄贴上 FORFILES 的帮助,很方便的工具~:)
Windows Server 2003系统自带:)



FORFILES
{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 ]
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
8 发表于 2007-03-14 23:41 ·  中国 新疆 克拉玛依 电信
新手上路
积分 2
发帖 1
注册 2007-03-14 01:55
UID 81643
性别 男
状态 离线
adsfsdf
9 发表于 2007-06-06 11:25 ·  中国 北京 大兴区 联通
新手上路
积分 2
发帖 1
注册 2007-06-06 11:04
UID 90413
性别 男
状态 离线
正好解决我的问题,谢谢诶!
10 发表于 2007-06-06 16:57 ·  中国 广东 广州 黄埔区 电信
中级用户
★★
积分 326
发帖 152
注册 2007-05-04 06:16
UID 87412
性别 男
状态 离线
:: 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
11 发表于 2007-10-25 16:55 ·  中国 浙江 杭州 电信
新手上路
积分 2
发帖 1
注册 2007-10-25 14:14
UID 100746
性别 男
状态 离线
我要下载啊
12 好帖啊 发表于 2007-12-20 14:23 ·  中国 江苏 苏州 昆山市 电信
新手上路
积分 2
发帖 1
注册 2007-12-20 13:48
UID 106232
性别 男
状态 离线
好帖啊
13 发表于 2007-12-20 17:04 ·  中国 广东 广州 海珠区 电信
新手上路
积分 2
发帖 1
注册 2007-12-20 13:20
UID 106228
性别 男
状态 离线
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怎么提示没有操作数的?
14 发表于 2007-12-20 19:59 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
从注释上看来03下没有问题
问题通常出在命令行参数上
仔细检查一下传递的参数是否按照要求
15 发表于 2007-12-29 13:30 ·  中国 浙江 杭州 联通
新手上路
积分 2
发帖 1
注册 2007-12-29 11:44
UID 107108
性别 男
状态 离线
先下来试试看
论坛跳转: