Board logo

标题: [代码合集] 下载和删除四个目录的文件,下载都成功,删除只有最前的一个成功 [打印本页]

作者: bkxmgx    时间: 2015-7-30 11:09     标题: 下载和删除四个目录的文件,下载都成功,删除只有最前的一个成功

@echo off
rem 指定FTP用户名
set ftpUser=***
rem 指定FTP密码
set ftpPass=******
rem 指定FTP服务器地址
set ftpIP=*.*.*.*


rem 1.数据库------------------服务器
set ftpFolder=mysqlbak

rem 2.工程日志----------服务器
set ftpFolder2=webapp/ROOT/logs

rem 3.还款计划----------------服务器
set ftpFolder3=repaymentPlan

rem 4.程序包------------------服务器
set ftpFolder4=webbak

rem 1.数据库------------------本地    0
set LocalFolder=e:\aliyunbak\dbbackup   

rem 2.玖和宝工程日志----------本地   1
set LocalFolder2=e:\aliyunbak\jiuhebaologs   

rem 3.还款计划----------------本地   0
set LocalFolder3=e:\aliyunbak\repaymentPlan

rem 4.程序包------------------本地   1
set LocalFolder4=e:\aliyunbak\webbak
rem 假设本机日期格式为yyyy-mm-dd(今天下载文件20090714.txt)


set DownDaysAgo=0
set DownDaysAgo2=1
rem 假设系统日期的格式为yyyy-mm-dd
call ateToDays %date:~0,4% %date:~5,2% %date:~8,2% DownPassDays
set /a DownPassDays-=%DownDaysAgo%
set /a DownPassDays2=DownPassDays-%DownDaysAgo2%
call :DaysToDate %DownPassDays% DstYear DstMonth DstDay
call :DaysToDate %DownPassDays2% DstYear3 DstMonth3 DstDay3
set DownDstDate=%DstYear%-%DstMonth%-%DstDay%
set DownDstDate2=%DstYear%%DstMonth%%DstDay%
set DownDstDate3=%DstYear3%-%DstMonth3%-%DstDay3%
set DownDstFile=jhddb%DownDstDate%.sql.gz
set DownDstFile2=jhd.log.%DownDstDate3%
set DownDstFile3=repayment%DownDstDate2%.xls
set DownDstFile4=%DownDstDate3%.tar.gz
echo %DownDaysAgo%天前的日期是%DownDstDate%


set DelDaysAgo=30
rem 假设系统日期的格式为yyyy-mm-dd
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% DelPassDays
set /a DelPassDays-=%DelDaysAgo%
call :DaysToDate %DelPassDays% DstYear DstMonth DstDay
set DelDstDate=%DstYear%-%DstMonth%-%DstDay%
set DelDstDate2=%DstYear%%DstMonth%%DstDay%
set DelDstFile=jhddb%DelDstDate%.sql.gz
set DelDstFile2=jhd.log.%DelDstDate%
set DelDstFile3=repayment%DelDstDate2%.xls
set DelDstFile4=%DelDstDate2%.tar.gz
echo %DelDaysAgo%天前的日期是%DelDstDate%


set ftpFile=%temp%\TempFTP.txt
>"%ftpFile%" (
  echo %ftpUser%
  echo %ftpPass%
  echo cd "%ftpFolder%"
  echo bin
  echo mget "%DownDstFile%"
  echo mdelete "%DelDstFile%"
  echo bye       
)
set ftpFile2=%temp%\TempFTP2.txt
>"%ftpFile2%" (
  echo %ftpUser%
  echo %ftpPass%
  echo cd "%ftpFolder2%"
  echo bin
  echo mget "%DownDstFile2%"
  echo mdelete "%DelDstFile2%"
  echo bye
)
set ftpFile3=%temp%\TempFTP3.txt
>"%ftpFile3%" (
  echo %ftpUser%
  echo %ftpPass%
  echo cd "%ftpFolder3%"
  echo ascii
  echo mget "%DownDstFile3%"
  echo mdelete "%DelDstFile3%"
  echo bye       
)
set ftpFile4=%temp%\TempFTP4.txt
>"%ftpFile4%" (
  echo %ftpUser%
  echo %ftpPass%
  echo cd "%ftpFolder4%"
  echo bin
  echo mget "%DownDstFile4%"
  echo mdelete "%DelDstFile4%"
  echo bye
)
cd /d "%LocalFolder%"
ftp -v -i -s:"%ftpFile%" %ftpIP%
cd /d "%LocalFolder2%"
ftp -v -i -s:"%ftpFile2%" %ftpIP%
cd /d "%LocalFolder3%"
ftp -v -i -s:"%ftpFile3%" %ftpIP%
cd /d "%LocalFolder4%"
ftp -v -i -s:"%ftpFile4%" %ftpIP%



:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
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 %4=%j%&goto :EOF

:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+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%&set %3=%mm%&set %4=%dd%&goto :EOF
作者: bkxmgx    时间: 2015-7-30 11:15

服务器上有mysqlbak、、webapp/ROOT/logs、、repaymentPlan、、webbak四个目录,,,本地对应的位置是e:\aliyunbak\dbbackup 、、e:\aliyunbak\jiuhebaologs  、、                          e:\aliyunbak\repaymentPlan、、 e:\aliyunbak\webbak,,,下载是下载当天或头一天的文件,,,删除都是删除30天前的文件,,,其中下载全部成功,,,但是删除的时候只能成功删除mysqlbak目录里面的文件,,,另外三个目录里面的文件删除失败,,,是什么原因??
作者: DAIC    时间: 2015-7-30 11:16

把批处理生成的文件 %temp%\TempFTP2.txt 的内容发出来看看
作者: bkxmgx    时间: 2015-7-30 11:36

***
******
cd "webapp/ROOT/logs"
bin
mget "jhd.log.2015-07-29"
mdelete "jhd.log.2015-06-30"
bye
作者: bkxmgx    时间: 2015-7-30 11:39

本帖最后由 bkxmgx 于 2015-7-30 11:52 编辑

***
******
cd "mysqlbak"
bin
mget "jhddb2015-07-30.sql.gz"
mdelete "jhddb2015-06-30.sql.gz"
bye
作者: bkxmgx    时间: 2015-7-30 11:39

。。。。。。。。。
作者: bkxmgx    时间: 2015-7-30 11:43

TempFTP.txt的内容如下:
***
******
cd "mysqlbak"
bin
mget "jhddb2015-07-30.sql.gz"
mdelete "jhddb2015-06-30.sql.gz"
bye
TempFTP2.txt的内容如下:
***
******
cd "webapp/ROOT/logs"
bin
mget "jhd.log.2015-07-29"
mdelete "jhd.log.2015-06-30"
bye
TempFTP3.txt的内容如下:
***
******
cd "repaymentPlan"
ascii
mget "repayment20150730.xls"
mdelete "repayment20150630.xls"
bye       
TempFTP4.txt的内容如下:
***
******
cd "webbak"
bin
mget "2015-07-29.tar.gz"
mdelete "20150630.tar.gz"
bye
作者: bkxmgx    时间: 2015-7-30 11:51

就第一个可以删除成功,后面三个都失败 ,删除失败的时候报错信息为:Delete operation failed.
作者: DAIC    时间: 2015-7-30 12:10

回复 4# bkxmgx


1、打开CMD窗口,手工连接FTP然后按照这个文件里面的命令一步一步执行,能否成功?
2、把顶楼代码修改一下,只保留处理webapp/ROOT/logs的部分,能否成功?
作者: bkxmgx    时间: 2015-7-30 12:42

ftp> cd "repaymentPlan"
ftp> bin
ftp> mget "repayment20150730.xls"
ftp> mdelete "repayment20150730.xls"
Delete operation failed.
ftp> bye
作者: bkxmgx    时间: 2015-7-30 12:54

ftp> cd "mysqlbak"
ftp> bin
ftp> mget "jhddb2015-07-30.sql.gz"
ftp> mdelete "jhddb2015-07-30.sql.gz"
ftp> bye
***********************************************
ftp> cd "webapp/ROOT/logs"
ftp> bin
ftp> mget "jhd.log.2015-07-30"
ftp> mdelete "jhd.log.2015-07-29"
Delete operation failed.
ftp> bye
**********************************
ftp> cd "repaymentPlan"
ftp> bin
ftp> mget "repayment20150730.xls"
ftp> mdelete "repayment20150730.xls"
Delete operation failed.
ftp> bye
***********************************
ftp> cd "webbak"
ftp> bin
ftp> mget "20150730.tar.gz"
ftp> mdelete "20150630.tar.gz"
Delete operation failed.
ftp> bye
作者: bkxmgx    时间: 2015-7-30 12:56

我刚才把完整的bat文件分成4个单独的bat  每个bat只下载和删除一个目录的文件,执行结果如上,只有第一个目录下载成功,后面三个全失败。。。
作者: bkxmgx    时间: 2015-7-30 12:56

ps:下载和删除的文件都是存在的。。。
作者: bkxmgx    时间: 2015-7-30 14:09

对了  其中有个现象就是
ftp> cd "mysqlbak"
ftp> bin
ftp> mget "jhddb2015-07-29.sql.gz"
ftp> mdelete "jhddb2015-06-30.sql.gz"
ftp> bye

ftp> cd "webapp/ROOT/logs"
ftp> bin
ftp> mget "jhd.log.2015-07-27"

完整的bat文件执行到这里的时候突然停 了下来等几十秒才往下执行。。
作者: bkxmgx    时间: 2015-7-30 14:11

完整的bat执行命令如下:

ftp> cd "mysqlbak"
ftp> bin
ftp> mget "jhddb2015-07-29.sql.gz"
ftp> mdelete "jhddb2015-06-30.sql.gz"
ftp> bye

ftp> cd "webapp/ROOT/logs"
ftp> bin
ftp> mget "jhd.log.2015-07-27"
ftp> mdelete "jhd.log.2015-06-30"
Delete operation failed.
ftp> bye

ftp> cd "repaymentPlan"
ftp> ascii
ftp> mget "repayment20150729.xls"
ftp> mdelete "repayment20150630.xls"
Delete operation failed.
ftp> bye

ftp> cd "webbak"
ftp> bin
ftp> mget "2015-07-27.tar.gz"
ftp> mdelete "20150630.tar.gz"
Delete operation failed.
ftp>bye
作者: bkxmgx    时间: 2015-7-30 14:58

喂  有人吗?
作者: DAIC    时间: 2015-7-30 16:12

回复 12# bkxmgx


打开CMD,手工连接ftp之后执行删除命令(不执行任何bat)也是报同样的错误吗?
用图形化FTP客户端关键练上去之后删文件报错吗?
作者: bkxmgx    时间: 2015-7-30 16:35

终于知道了  原来服务器上第一个目录没有做权限设置所以可以删除    而其他三个目录都做了权限设置禁止删除文件,麻麻地  搞了哥几天  原来是服务器设置了权限,

以下是我用客户端连接之后点击一个文件删除:
状态:        列出“/home/jhd/mysqlbak”的目录成功
状态:        正在删除“/home/jhd/repaymentPlan/repayment20150601.xls”
命令:        rm "/home/jhd/repaymentPlan/repayment20150601.xls"
错误:        rm /home/jhd/repaymentPlan/repayment20150601.xls: permission denied




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2