Board logo

标题: ftp 删除服务器上的文件问题 [打印本页]

作者: westmstc     时间: 2008-12-15 11:19    标题: ftp 删除服务器上的文件问题
现在有一个BAT脚本,每天早晚分别上传不同的文件。现在想通过上传文件后自动把删除掉FTP上一周前的文件给删掉,只保留最近一周的,能不能实现。
文件格式如下。
008-11-25 11:32 1,131,266 posSeller_2008-12-12早.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-12晚.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-13早.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-13晚.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-14早.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-14晚.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-15早.BAK
008-11-25 11:32 1,131,266 posSeller_2008-12-15晚.BAK

ftp 脚本如下

@echo off
set dt=%date:~0,10%

if "%time:~0,5%" geq " 7:00" (
if "%time:~0,5%" lss "12:00" (
goto _amftp
) else if "%time:~0,5%" geq "12:00" (
if "%time:~0,5%" lss "24:00" (
goto _pmftp
)
)
)

:_amftp
echo nfspos> up.txt
echo nfspos>> up.txt
echo binary>> up.txt
echo hash>> up.txt
echo cd /nfspos/foodcard>> up.txt
echo put posSeller_%dt%早.BAK>> up.txt
echo bye>> up.txt
ftp -i -s:up.txt 192.10.1.249
del up.txt
goto _end

:_pmftp
echo nfspos> up.txt
echo nfspos>> up.txt
echo binary>> up.txt
echo hash>> up.txt
echo cd /nfspos/foodcard>> up.txt
echo put posSeller_%dt%晚.BAK>> up.txt
echo bye>> up.txt
ftp -i -s:up.txt 192.10.1.249
del up.txt
goto _end

:_end

作者: HAT     时间: 2008-12-15 11:53
楼主不知道如何计算一周前的日期?还是不知道如何用ftp命令删除文件?
或者两个都不会,只能等待他人给出完整代码?

作者: qwertl     时间: 2008-12-15 15:37
"现在想通过上传文件后自动把删除掉FTP上一周前的文件给删掉,只保留最近一周的,"

在FTP服务器上执行任务计划运行批处理来实现比较容易,通过客户端来好象不实现到.

作者: yishanju     时间: 2008-12-15 16:00
我只会说计算日期用DATEX

作者: yishanju     时间: 2008-12-15 16:01
可以用来计算,某天某日,N天前后的日期

作者: westmstc     时间: 2008-12-15 16:25
日期可以计算出来,但计算出来的日期怎么和服务器上的文件想比较,ftp 里可以用正则表达式吗。现在服务器是没有ROOT权限,做不了定时计划任务。

Last edited by westmstc on 2008-12-15 at 16:27 ]

作者: exzzz     时间: 2008-12-15 16:39
有个思路:
登陆ftp,list保存下来个TXT文件,每行是一个文件名。
然后把本地日期做个变量,然后根据变量生成最近7天的日期变量的文件名。
然后在TXT里面,查询每行的变量,将每行的变量用set命令替换这个变量7次,每一次都将7个日期变量中的一个替换为空,替换完毕后,这样剩下的txt就是应该删除文件的列表了,再登陆FTP ,del这些文件就可以了。

作者: yishanju     时间: 2008-12-15 16:41
我自己的数据备份软件脚本是这样处理的,每次运行的时候就删除三天前的数据文件,

for /f %%i in ('datex -d yyyymmdd -o 3') do (set old=%%i)
del empire_%old%.bak

Last edited by yishanju on 2008-12-15 at 16:59 ]

作者: exzzz     时间: 2008-12-15 16:47
Originally posted by yishanju at 2008-12-15 04:41 PM:
我在主题里并没有看到这样的意思


6楼里有这个意思。

作者: HAT     时间: 2008-12-15 18:11    标题: Re 6楼
建议把6楼的描述更新到顶楼,以方便他人查看。