找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: lazygc520

[文件操作] [已解决]批处理如何获取FTP上面下载1天前的文件?

[复制链接]
发表于 2009-4-9 11:52:18 | 显示全部楼层

回复 60楼 的帖子

仔细看看35楼的代码:
      echo get "%%i" "%DownFolder%\%%i"
 楼主| 发表于 2009-4-9 13:01:22 | 显示全部楼层

回复 61楼 的帖子

谢谢,那如果要把数据同时存入2个文件夹怎么写?
发表于 2009-4-9 13:09:52 | 显示全部楼层

回复 62楼 的帖子

你把现在最新的完整代码贴出来,我帮你加上这个功能。
 楼主| 发表于 2009-4-9 13:12:59 | 显示全部楼层

回复 63楼 的帖子

谢谢!~
  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. rem 指定下载几天前的文件
  13. set DaysAgo=1
  14. set ftpDir=%temp%\TempDir.txt
  15. set ftpDown=%temp%\TempDown.txt

  16. rem 假设本机日期格式为yyyy-mm-dd
  17. set FileY=%date:~0,4%
  18. call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
  19. set /a PassDays-=DaysAgo
  20. call :DaysToDate %PassDays% DstYear DstMonth DstDay

  21. >"%ftpDir%" echo.%ftpUser%
  22. >>"%ftpDir%" echo.%ftpPass%
  23. >>"%ftpDir%" echo bin
  24. >>"%ftpDir%" echo cd "%ftpFolder%"
  25. >>"%ftpDir%" echo dir * "%temp%\FileList.txt"
  26. >>"%ftpDir%" echo bye
  27. start ftp -v -i -s:"%ftpDir%" %ftpIP%

  28. rem 根据实际情况自行调节延迟时间
  29. ping -n 200 127.1 >nul

  30. findstr /i ":*\.SWM$" "%temp%\FileList.txt">"%temp%\FileDate.txt"
  31. findstr /i ":*\.TWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
  32. findstr /i ":*\.OWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"

  33. >"%ftpDown%" echo.%ftpUser%
  34. >>"%ftpDown%" echo.%ftpPass%
  35. >>"%ftpDown%" echo bin
  36. >>"%ftpDown%" echo cd "%ftpFolder%"
  37. (for /f "usebackq tokens=1-9 delims= " %%a in ("%temp%\FileDate.txt") do (
  38.   setlocal enabledelayedexpansion
  39.   if "%%f" equ "Jan" (
  40.     set FileM=01
  41.   ) else if "%%f" equ "Feb" (
  42.     set FileM=02
  43.   ) else if "%%f" equ "Mar" (
  44.     set FileM=03
  45.   ) else if "%%f" equ "Apr" (
  46.     set FileM=04
  47.   ) else if "%%f" equ "May" (
  48.     set FileM=05
  49.   ) else if "%%f" equ "Jun" (
  50.     set FileM=06
  51.   ) else if "%%f" equ "Jul" (
  52.     set FileM=07
  53.   ) else if "%%f" equ "Aug" (
  54.     set FileM=08
  55.   ) else if "%%f" equ "Sep" (
  56.     set FileM=09
  57.   ) else if "%%f" equ "Oct" (
  58.     set FileM=10
  59.   ) else if "%%f" equ "Nov" (
  60.     set FileM=11
  61.   ) else if "%%f" equ "Dec" (
  62.     set FileM=12
  63.   )
  64.   set FileD=10%%g
  65.   set FileD=!FileD:~-2!
  66.   if "!FileM!" equ "%DstMonth%" (
  67.     if "!FileD!" equ "%DstDay%" (
  68.      echo get "%%i" "%DownFolder%\%%i"
  69.     )
  70.   )
  71.   endlocal
  72. ))>>"%ftpDown%"
  73. >>"%ftpDown%" echo bye
  74. start ftp -v -i -s:"%ftpDown%" %ftpIP%
  75. goto :eof

  76. :DateToDays %yy% %mm% %dd% days
  77. setlocal ENABLEEXTENSIONS
  78. set yy=%1&set mm=%2&set dd=%3
  79. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  80. set /a dd=100%dd%%%100,mm=100%mm%%%100
  81. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  82. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  83. endlocal&set %4=%j%&goto :EOF

  84. :DaysToDate %days% yy mm dd
  85. setlocal ENABLEEXTENSIONS
  86. set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  87. 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
  88. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  89. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  90. endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
复制代码
发表于 2009-4-9 13:57:34 | 显示全部楼层

回复 64楼 的帖子

两个思路:
1、先从FTP上面下载到一个文件夹中,下载完之后用xcopy复制到另一个文件夹。难点在于不容易判断下载操作什么时候能够完成。
2、从FTP上面下载两次。缺点在于下载时间会延长,会增加服务器的负担。代码如下:
  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.      echo get "%%i" "%DownFolder2%\%%i"
  71.     )
  72.   )
  73.   endlocal
  74. ))>>"%ftpDown%"
  75. >>"%ftpDown%" echo bye
  76. start ftp -v -i -s:"%ftpDown%" %ftpIP%
  77. goto :eof

  78. :DateToDays %yy% %mm% %dd% days
  79. setlocal ENABLEEXTENSIONS
  80. set yy=%1&set mm=%2&set dd=%3
  81. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  82. set /a dd=100%dd%%%100,mm=100%mm%%%100
  83. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  84. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  85. endlocal&set %4=%j%&goto :EOF

  86. :DaysToDate %days% yy mm dd
  87. setlocal ENABLEEXTENSIONS
  88. set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  89. 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
  90. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  91. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  92. endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
复制代码
 楼主| 发表于 2009-4-9 14:08:14 | 显示全部楼层
如果我能保证在15分钟内完成ftp下载,按照第一种思路,复制的代码如何实现?
发表于 2009-4-9 14:20:50 | 显示全部楼层

回复 66楼 的帖子

  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%"
  74. >>"%ftpDown%" echo bye
  75. start ftp -v -i -s:"%ftpDown%" %ftpIP%

  76. rem 根据实际情况自行调节延迟时间
  77. ping -n 1000 127.1 >nul

  78. copy /y "%DownFolder%\*.*" "%DownFolder2%"
  79. goto :eof

  80. :DateToDays %yy% %mm% %dd% days
  81. setlocal ENABLEEXTENSIONS
  82. set yy=%1&set mm=%2&set dd=%3
  83. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  84. set /a dd=100%dd%%%100,mm=100%mm%%%100
  85. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  86. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  87. endlocal&set %4=%j%&goto :EOF

  88. :DaysToDate %days% yy mm dd
  89. setlocal ENABLEEXTENSIONS
  90. set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  91. 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
  92. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  93. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  94. endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
复制代码

评分

参与人数 1PB +4 收起 理由
lazygc520 + 4 thanks

查看全部评分

发表于 2009-4-9 14:21:38 | 显示全部楼层
如果想采取其它延时方法,可参考:批处理中的延时
http://bbs.bathome.net/viewthread.php?tid=233
http://bbs.bathome.net/viewthread.php?tid=3693#pid23312

评分

参与人数 1PB +4 收起 理由
lazygc520 + 4 很好的解决了问题.回答的很耐心。

查看全部评分

发表于 2018-4-28 19:50:23 | 显示全部楼层
请问我运行这个脚本的时候,FileList.txt根本没有生成,请高手指点为什么。谢谢!
发表于 2018-5-3 09:31:22 | 显示全部楼层
回复 69# Qiqiqiqi


    你运行的几楼的脚本?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 18:16 , Processed in 0.018046 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表