中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 19:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个关于数据删除的问题请教.
16 发表于 2008-02-04 00:00 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
@echo off
call :转换日期格式

>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d",-7,Date),2)
for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i
del tmp.vbs
set aDate=%aDate:~2%
setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir/s/b/a-d xxx\*.*') do (
set fileDate=%%~ti
set fileDate=!fileDate:~0,-7!
if !fileDate:-=! LSS %aDate:-=% del /q/f "%%i"
)
pause
exit

:转换日期格式
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo
>>aDate.reg echo "sShortDate"="yyyy-MM-dd"
regedit /s aDate.reg
del aDate.reg
goto:eof
第一高手 第二高手

17 发表于 2008-02-04 00:11 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
太感谢了!
不过有个不情之请,能大概解释下这些代码么?
我看的不是很懂.
真的很谢谢你!
18 发表于 2008-02-04 00:12 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
这个不会把目录结构也给删了吧,只是删一周前某一天的文件,是么?
19 发表于 2008-02-04 00:22 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
转换日期格式为2008-01-01
用vbs获取当前日期-7天的日期为aDate变量(如果上面没有转换vbs获取日期格式是2008-1-1)
最后一个for不必解释了,把
if !fileDate:-=! LSS %aDate:-=% del /q/f "%%i"
换成
echo if !fileDate:-=! LSS %aDate:-=% del /q/f "%%i"
就一目了然了


代码运行过一次call :转换日期格式 及下面一部分可以去掉了
第一高手 第二高手

20 发表于 2008-02-04 00:24 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by fzp1978321 at 2008-2-4 00:12:
这个不会把目录结构也给删了吧,只是删一周前某一天的文件,是么?


是的
第一高手 第二高手

21 发表于 2008-02-04 00:28 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
你真的很强大,呵呵.
明天我去WIN2000上试下.非常感谢!
有问题我会及时反馈.
那这个批处理是放在那个目录下就OK么?我想把它做成计划任务,每天定时运行.

[ Last edited by fzp1978321 on 2008-2-4 at 12:30 AM ]
22 发表于 2008-02-04 00:44 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
如果文件的日期格式就只是如2008-1-1,2008-1-11,那就不需要进行转换,那代码如何改呢?
23 发表于 2008-02-04 00:45 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
set fileDate=%%~ti

是修改日期吧。因为不是创建日期一直没有写。。。
24 发表于 2008-02-04 01:16 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
这个2000 XP通用的,且修改时间后再还原,保持系统默认状态

@echo off
regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
call :DateFormat

>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d",-7,Date),2)
for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i
del tmp.vbs
ver|find "2000">nul&&set aDate=%aDate:~2%
set aDate=%aDate:-=%
setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir/s/b/a-d xxx\*.*') do (
set fileDate=%%~ti
set fileDate=!fileDate:~0,-6!
set fileDate=!fileDate:-=!
if !fileDate! LSS %aDate% del /q/f "%%i"
)
regedit /s "%temp%\bak.reg"
del /q "%temp%\bak.reg"
pause
exit

:DateFormat
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo
>>aDate.reg echo "sShortDate"="yyyy-MM-dd"
>>aDate.reg echo "sDate"="-"
regedit /s aDate.reg
del aDate.reg
goto:eof


[ Last edited by fastslz on 2008-2-4 at 02:28 AM ]
第一高手 第二高手

25 发表于 2008-02-04 01:20 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
那比如我要删除D:\FTPSERVER内7天前生成的所有文件,我是不是将这个批处理放在D:\FTPSERVER这个目录中,然后做个计划任务就行了呢?不会7天后把自己给删掉吧?
想确认下这问题
26 发表于 2008-02-04 01:25 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by slore at 2008-2-4 00:45:
set fileDate=%%~ti

是修改日期吧。因为不是创建日期一直没有写。。。


是的
如果那样的,楼主要创建时间的话通过call 标签dir /tc获得,但是理论上每7天删除的话修改时间也是可行的
第一高手 第二高手

27 发表于 2008-02-04 01:28 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by fzp1978321 at 2008-2-4 01:20:
那比如我要删除D:\FTPSERVER内7天前生成的所有文件,我是不是将这个批处理放在D:\FTPSERVER这个目录中,然后做个计划任务就行了呢?不会7天后把自己给删掉吧?
想确认下这问题


('dir/s/b/a-d xxx\*.*^|find /v /i ".bat"')
排除.bat文件
第一高手 第二高手

28 发表于 2008-02-04 01:31 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
长见识了,差距还真不是一年两年的啊...
去2000下测试成功后,明天过来结贴.
非常感谢!
29 发表于 2008-02-04 01:44 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
UID 108931
性别 男
状态 离线
好象我很麻烦
刚才试着在XP下运行了下,报错.
"系统找不到指定的批处理标签转换日期格式
"此时不应有-!"
30 发表于 2008-02-04 01:55 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
不可能呀,我都是在XP和2000 pro下测试的
莫非你的cmd代码页修改过,或者某部分多了个空格
改成英文标签

call :xxx

:xxx
第一高手 第二高手

论坛跳转: