怎么用dos写一个批处理,要求按时间删除旧文件,只保留最新文件,因为我要做数据库定时备份,在线等

能实现的,给积分20
有人知道吗?再加20分,40分,有人能回答吗

用for命令处理dir /b/o-d的列表,跳过前面不需要删除的部分。dir /o-d是按时间倒序排列。

for /f "skip=1 tokens=* delims=" %i in ('dir /b/o-d 你的备份目录) do @del /f/q "%i"

上面的命令只是给出一个大概的样子,调整skip=后面的参数,可以选择跳过几个文件不删除,剩下的你还要自己调试一下。建议你先在@后面加上echo 进行调试,以免误删不能删除的文件。调试好后再去掉echo。追问

我见过网上有人这样做,但是不明白什么意思
@echo off
FOR /f "usebackq skip=4 tokens=4,* delims= " %%i IN (`dir /x /o:-d`) DO (del %%i
goto end)
:end
echo ok!

追答

你学一下for命令的用法就知道了。跟我的意思差不多,但它的不如我的好用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-22
@echo off
set n=2
::保留最近 n 天的文件(早于 n 天就删除)
set p=d:\data
::操作的目录
robocopy /s "%p%" d:\xxxxxx /minage:%n% /mov
rd /s /q d:\xxxxxx追问

你这个不是删除,是移动和拷贝到令一个文件夹下,和我的要求完全不一样。
我见过网上有人这样做,但是不明白什么意思,能帮我解释下吗
@echo off
FOR /f "usebackq skip=4 tokens=4,* delims= " %%i IN (`dir /x /o:-d`) DO (del %%i
goto end)
:end
echo ok!

追答

我这个是简单实现你的要求的代码,先把满足条件的文件移动到一个文件夹,再删掉这个文件夹。
结果完全一样。

你提供的代码有明显的错误,已经无法理解它的真实意图。

追问

我明白,你这样太麻烦了,一个数据库备份文件750MB,以后还会更多,要照你这么操作,时间太长了

追答

@echo off
set n=2
::保留最近文件的个数(按时间排序)
set p=d:\data
::操作的目录
for /f "skip=%n% tokens=*" %%i in ('dir /b /o-d "%p%") do del /f /q "%%i"

追问

能解释一下吗?我只能读懂一点,我刚才又看到网上很多人的思路,是先把所有文件按最新时间排序,写在一个txt文件里,然后用for循环读这个文件,跳过第一个文件,再逐一删除

追答

set n=2
set p=d:\data

for /f "skip=%n% tokens=*" %%i in ('dir /b /a-d /o-d "%p%"') do del /f /q "%%i"

dir /b /a-d /o-d "%p%" :按时间顺序列出文件,新文件在前

skip=%n% :跳过几个文件(就是要保留几个最新文件)

追问

我修改了你这句话,for /f "skip1" %i in (D:\dataBase\) do del /f /q %i,我直接在dos下运行可以,但是写一个批处理文件dat,就报不应该有do,怎么回事

追答

CMD 里面运行:
for /f "skip=1 tokens=*" %i in ('dir /b /a-d /o-d D:\dataBase') do del /f /q "%i"

批处理里面:
for /f "skip=1 tokens=*" %%i in ('dir /b /a-d /o-d D:\dataBase') do del /f /q "%%i"

你修改的不对哦

追问

我修改了一下,成功了,谢谢了啊
for /f "skip=1 tokens=*" %%i in ('dir /b /a-d /o-d D:\dataBase\') do del /f /q D:\dataBase\%%i
cmd

追答

哦,因为没有用 /s 参数,所以得到的文件名不含路径,需要添加上路径。

本回答被提问者和网友采纳
第2个回答  2012-10-22



这几个都与你的问题相似,你参考下。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网