Board logo

标题: [文件操作] [已解决]删除FTP服务器指定目录下N日前文件的批处理? [打印本页]

作者: qwertl    时间: 2009-7-20 00:33     标题: [已解决]删除FTP服务器指定目录下N日前文件的批处理?

  1. set lcdDir=e:\ftp
  2. set delfile=e:\ftp\delfile.txt
  3. set ftpdir=/test
  4. for /f %%A in ('datex -f mmdd -o-3') do echo %%A&set dstday=%%A   
  5. (for /f "usebackq skip=2  tokens=1-9 delims= " %%a in ("%lcdDir%\a.txt") do   (
  6.   setlocal enabledelayedexpansion
  7.   if "%%f" equ "Jan" (
  8.     set FileM=01
  9.   ) else if "%%f" equ "Feb" (
  10.     set FileM=02
  11.   ) else if "%%f" equ "Mar" (
  12.     set FileM=03
  13.   ) else if "%%f" equ "Apr" (
  14.     set FileM=04
  15.   ) else if "%%f" equ "May" (
  16.     set FileM=05
  17.   ) else if "%%f" equ "Jun" (
  18.     set FileM=06
  19.   ) else if "%%f" equ "Jul" (
  20.     set FileM=07
  21.   ) else if "%%f" equ "Aug" (
  22.     set FileM=08
  23.   ) else if "%%f" equ "Sep" (
  24.     set FileM=09
  25.   ) else if "%%f" equ "Oct" (
  26.     set FileM=10
  27.   ) else if "%%f" equ "Nov" (
  28.     set FileM=11
  29.   ) else if "%%f" equ "Dec" (
  30.     set FileM=12
  31.   )
  32.   set FileD=%%g
  33.     if "!FileM!%FileD%" lss "%dstday%" (
  34.      echo del /%ftpdir%/"%%i"
  35.      )
  36.   endlocal
  37. ))>>"%delfile%"
复制代码
参照http://bbs.bathome.net/viewthread.php?tid=4010&extra=&highlight=ftp&page=5
改了下,应用了datex.exe计算日期,本例计算3天前日期,3天的前的该目录下文件全删除。  if "!FileM!%FileD%" lss "%dstday%"这里的计算没有生效,需怎改请各位指正??

省略了FTP的连接代码。先从手动获取的a.txt里测试。
E:\ftp>date /t
2009-07-20 星期一
E:\ftp>echo %dstday%
0717


dir * a.txt 生成的文本格式:
drw-rw-rw-   1 user     group           0 Jul 19 19:07 .
drw-rw-rw-   1 user     group           0 Jul 19 19:07 ..
-rw-rw-rw-   1 user     group    23245249 Jul 14 22:35 12wzglk-doc20090711.zip
-rw-rw-rw-   1 user     group    23482564 Jul 14 22:35 12wzglk-doc20090714.zip
-rw-rw-rw-   1 user     group    23170568 Jul 15 18:15 12wzglk-doc20090715.zip
-rw-rw-rw-   1 user     group      700080 Jul 16 18:15 12wzglk-doc20090716.zip
-rw-rw-rw-   1 user     group      794025 Jul 17 18:15 12wzglk-doc20090717.zip
-rw-rw-rw-   1 user     group      794025 Jul 18 18:15 12wzglk-doc20090718.zip
-rw-rw-rw-   1 user     group      794025 Jul 19 18:15 12wzglk-doc20090719.zip
。。。。。。。。。。。。。。




执行bat 后生成的E:\ftp\delfile.txt内容为:
del /test/12wzglk-doc20090711.zip
del /test/12wzglk-doc20090714.zip
del /test/12wzglk-doc20090715.zip
del /test/12wzglk-doc20090716.zip
del /test/12wzglk-doc20090717.zip
del /test/12wzglk-doc20090718.zip
del /test/12wzglk-doc20090719.zip
.........

正常应不显示17日后的文件。

我的QQ:1227466295

[ 本帖最后由 qwertl 于 2009-7-20 09:33 编辑 ]
作者: qwertl    时间: 2009-7-20 07:26

摘自Batcher的代码

  1. @echo off
  2. rem 指定FTP用户名
  3. set ftpUser=asx
  4. rem 指定FTP密码
  5. set ftpPass=asx-asx
  6. rem 指定FTP服务器地址
  7. set ftpIP=172.19.103.7
  8. rem 指定待下载的文件位于FTP服务器的什么位置
  9. set ftpFolder=/export/home/PROD/ntcdata
  10. rem 指定从FTP下载下来的文件存放到什么地方
  11. set DownFolder=E:\Temp
  12. set DownFolder2=E:\Temp2
  13. rem 指定下载几天前的文件
  14. set DaysAgo=1
  15. set ftpDir=%temp%\TempDir.txt
  16. set ftpDown=%temp%\TempDown.txt
  17. rem 假设本机日期格式为yyyy-mm-dd
  18. set FileY=%date:~0,4%
  19. call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
  20. set /a PassDays-=DaysAgo
  21. call :DaysToDate %PassDays% DstYear DstMonth DstDay
  22. >"%ftpDir%" echo.%ftpUser%
  23. >>"%ftpDir%" echo.%ftpPass%
  24. >>"%ftpDir%" echo bin
  25. >>"%ftpDir%" echo cd "%ftpFolder%"
  26. >>"%ftpDir%" echo dir * "%temp%\FileList.txt"
  27. >>"%ftpDir%" echo bye
  28. start ftp -v -i -s:"%ftpDir%" %ftpIP%
  29. rem 根据实际情况自行调节延迟时间
  30. ping -n 200 127.1 >nul
  31. findstr /i ":*\.SWM$" "%temp%\FileList.txt">"%temp%\FileDate.txt"
  32. findstr /i ":*\.TWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
  33. findstr /i ":*\.OWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
  34. >"%ftpDown%" echo.%ftpUser%
  35. >>"%ftpDown%" echo.%ftpPass%
  36. >>"%ftpDown%" echo bin
  37. >>"%ftpDown%" echo cd "%ftpFolder%"
  38. (for /f "usebackq tokens=1-9 delims= " %%a in ("%temp%\FileDate.txt") do (
  39. setlocal enabledelayedexpansion
  40. if "%%f" equ "Jan" (
  41. set FileM=01
  42. ) else if "%%f" equ "Feb" (
  43. set FileM=02
  44. ) else if "%%f" equ "Mar" (
  45. set FileM=03
  46. ) else if "%%f" equ "Apr" (
  47. set FileM=04
  48. ) else if "%%f" equ "May" (
  49. set FileM=05
  50. ) else if "%%f" equ "Jun" (
  51. set FileM=06
  52. ) else if "%%f" equ "Jul" (
  53. set FileM=07
  54. ) else if "%%f" equ "Aug" (
  55. set FileM=08
  56. ) else if "%%f" equ "Sep" (
  57. set FileM=09
  58. ) else if "%%f" equ "Oct" (
  59. set FileM=10
  60. ) else if "%%f" equ "Nov" (
  61. set FileM=11
  62. ) else if "%%f" equ "Dec" (
  63. set FileM=12
  64. )
  65. set FileD=10%%g
  66. set FileD=!FileD:~-2!
  67. if "!FileM!" equ "%DstMonth%" (
  68. if "!FileD!" equ "%DstDay%" (
  69. echo get "%%i" "%DownFolder%\%%i"
  70. )
  71. )
  72. endlocal
  73. ))>>"%ftpDown%"
复制代码



set FileD=10%%g
set FileD=!FileD:~-2!
if "!FileM!" equ "%DstMonth%" (
if "!FileD!" equ "%DstDay%" (
echo get "%%i" "%DownFolder%\%%i"
)
)

请教如上小部分代码中,要修改"!FileM!" "!FileD!"(连接一起组成的数字)  小于及等于 "%DstDay%"要怎样修改呢?
作者: qwertl    时间: 2009-7-20 07:37

set FileD=10%%g
  set FileD=!FileD:~-2!
  if "!FileM!!FileD!" leq "%DstMonth%%DstDay%" (
    echo get "%%i" "%DownFolder%\%%i"
    )
   endlocal

修改为如上可以了。




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