Board logo

标题: [文件操作] [已解决]批处理如何获取FTP上面下载1天前的文件? [打印本页]

作者: lazygc520    时间: 2009-4-3 10:01     标题: [已解决]批处理如何获取FTP上面下载1天前的文件?

如果在ftp上文件的命名不包含时间信息,只能通过文件的属性来看的话,请问怎么获取这个文件的时间信息?
像附件图中的系统文件的时间能不能直接读出来?
[attach]1583[/attach]
作者: Batcher    时间: 2009-4-3 12:13

如果文件夹名称都是 20090403 这种格式的日期,可以试试这样:
  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 LocalFolder=E:\Temp
  12. rem 指定下载几天前的文件
  13. set DaysAgo=1
  14. for /f %%i in ('PowerShell -Command "&{Get-Date (Get-Date).AddDays(-%DaysAgo%) -uformat "%%Y%%m%%d"}"') do (
  15.     set "DstDate=%%i"
  16. )
  17. set ftpFolder=%ftpFolder%/%DstDate%
  18. set ftpFile=%temp%\TempFTP.txt
  19. >"%ftpFile%" echo,%ftpUser%
  20. >>"%ftpFile%" echo,%ftpPass%
  21. >>"%ftpFile%" echo cd "%ftpFolder%"
  22. >>"%ftpFile%" echo lcd "%LocalFolder%"
  23. >>"%ftpFile%" echo bin
  24. >>"%ftpFile%" echo mget *.*
  25. >>"%ftpFile%" echo bye
  26. start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码

作者: lazygc520    时间: 2009-4-3 12:36

如果能获取文件的属性信息,那么为什么不能获得它的时间信息?
作者: zqz0012005    时间: 2009-4-3 12:37

其实可以通过解析dir命令的输出来得到。
比如连到某个ftp服务器后来得的结果:
ftp> dir
drwx------ 1 user group              0 Apr 01 11:23 a
-rwx------ 1 user group           1285 Mar 28 2008 readme.txt

ftpFile:user\pass\cd path\dir\bye

for /f %%a in ('ftp -v -i -s:"%ftpFile%" %ftpIP%') do ...
作者: Batcher    时间: 2009-4-3 12:37     标题: 回复 3楼 的帖子

那是网络编程实现的
批处理没有这功能
作者: lazygc520    时间: 2009-4-3 12:39

哦,是不是我要另外写个程序,然后用批处理调用才能获取时间信息?
作者: Batcher    时间: 2009-4-3 12:44     标题: 回复 6楼 的帖子

你可以参照4楼的方法,在dir命令的返回结果中获取日期信息。
不过,日期信息所在列是不确定的,而且格式也是不同的。
你可以先看看自己连上的FTP服务器后,dir命令的返回结果如何。
作者: lazygc520    时间: 2009-4-3 12:52

我已经截得图片:
不知道怎么个写法?
作者: Batcher    时间: 2009-4-3 12:59     标题: 回复 8楼 的帖子

先把英文月份转换成数字
再计算日期
作者: lazygc520    时间: 2009-4-3 13:06

我重新上个图,最后一列是文件,倒数第2列是代表时间。
[attach]1581[/attach]
作者: lazygc520    时间: 2009-4-3 13:16

关于时间轴的转换,希望batcher发个链接。
作者: Batcher    时间: 2009-4-3 13:25     标题: 回复 11楼 的帖子

在动手写代码之前,还有一点需要确认,那就是倒数第二列的时间。
大于某个时间(比如6个月之前)的文件,倒数第二列会显示年;小于某个时间(比如6个月之内)的文件,倒数第二列会显示时间。
你需要问问服务器管理员这里是如何设置的。
作者: lazygc520    时间: 2009-4-3 14:17

如果倒数第二列都是按日期+时间的形式存在呢?
作者: Batcher    时间: 2009-4-3 14:22     标题: 回复 13楼 的帖子

你能确定它们都是2009年?万一有些是2008年咋办?
作者: lazygc520    时间: 2009-4-3 14:24

我可以确定,没有08年的
作者: Batcher    时间: 2009-4-3 14:25     标题: 回复 15楼 的帖子

好,你把10楼的结果以文本的形式贴出来,我帮你写代码。
可以用这个ftp命令:
dir * a.txt
作者: lazygc520    时间: 2009-4-3 14:29

原帖由 Batcher 于 2009-4-3 14:25 发表
好,你把10的结果以文本的形式贴出来,我帮你写代码。
可以用这个ftp命令:
dir * a.txt

10的结果?
作者: Batcher    时间: 2009-4-3 14:31     标题: 回复 17楼 的帖子

10楼
作者: lazygc520    时间: 2009-4-3 14:34

哦,我用上面的命令。我的txt文本会生成在什么地方?本机目录还是ftp?
作者: Batcher    时间: 2009-4-3 14:36     标题: 回复 19楼 的帖子

是生成在本机的命令行解释器当前目录下
我得去看电影了
你先把结果贴出来
如果没有其他人帮你写
我待会回来写
作者: lazygc520    时间: 2009-4-3 14:50

我看了下,应该如batcher之前说的一样,当大于6个月时,时间以年份显示。
生成的txt文件内容:

-rw-rw-r--   1 mfg      100            0 Jul 26  2008 26jul08.asc
-rw-rw-r--   1 mfg      100         6908 Apr  2 02:02 F123456T8E.FT2
-rw-rw-r--   1 nanya    1000        2112 Apr  2 23:24 F123456T8E.FT3
-rw-rw-r--   1 mfg      100       145530 Apr  2 02:02 F123456T8E.SWM
-rw-rw-r--   1 nanya    1000       59425 Apr  2 23:24 F123456T8E.TWM
-rw-rw-r--   1 mfg      100        41272 Mar 31 02:09 F123456T9E.FT2
-rw-rw-r--   1 mfg      100        23144 Mar 31 03:54 F123456T9E.FT3
-rw-rw-r--   1 mfg      100       603284 Mar 31 02:09 F123456T9E.SWM
-rw-rw-r--   1 mfg      100       534780 Mar 31 03:54 F123456T9E.TWM
-rw-rw-r--   1 mfg      100       134024 Apr  1 17:30 F333333T0G.FT2
-rw-rw-r--   1 mfg      100       131296 Apr  1 19:26 F333333T0G.FT3
-rw-rw-r--   1 1000     staff       6204 Apr  2 02:10 F333333T0G.FT4
-rw-rw-r--   1 1000     staff    2096229 Apr  2 02:10 F333333T0G.OWM
-rw-rw-r--   1 mfg      100      1782556 Apr  1 17:30 F333333T0G.SWM
-rw-rw-r--   1 mfg      100      1319279 Apr  1 19:26 F333333T0G.TWM
-rw-rw-r--   1 mfg      100        41228 Jan 16 07:46 F833748T6D.FT2
-rw-rw-r--   1 nanya    staff      39116 Jan 17 16:36 F833748T6D.FT3
-rw-rw-r--   1 mfg      100       582244 Jan 16 07:46 F833748T6D.XWM
-rw-rw-r--   1 mfg      100        74536 Jan 14 16:00 F834233T5C.FT2
-rw-rw-r--   1 1000     staff      71720 Jan 22 17:06 F834233T5C.FT3
-rw-rw-r--   1 mfg      100       942672 Jan 14 16:01 F834233T5C.XWM
-rw-rw-r--   1 mfg      100         8800 Jan 16 11:49 F834304T3E.FT2
-rw-rw-r--   1 nanya    staff       8712 Jan 17 17:15 F834304T3E.FT3
-rw-rw-r--   1 mfg      100       124176 Jan 16 11:49 F834304T3E.XWM
-rw-rw-r--   1 mfg      100        29524 Jan 16 09:35 F834447T1C.FT2
-rw-rw-r--   1 1000     other      27368 Feb 12 14:05 F834447T1C.FT3
-rw-rw-r--   1 mfg      100       448253 Jan 16 09:35 F834447T1C.XWM
-rw-rw-r--   1 asx      asx       827156 Dec 15 18:12 F835117T4D.FT3
-rw-rw-r--   1 mfg      100       437448 Dec 25 22:04 F835147T9D.FT2
-rw-rw-r--   1 1000     other     829664 Jan 17 11:32 F835147T9D.FT3
-rw-rw-r--   1 mfg      100      6140060 Dec 25 22:04 F835147T9D.XIM
-rw-rw-r--   1 mfg      100        10208 Jan 14 15:33 F835281T4E.FT2
-rw-rw-r--   1 nanya    1000        9900 Jan 16 15:17 F835281T4E.FT3
-rw-rw-r--   1 mfg      100       161754 Jan 14 15:33 F835281T4E.XWM
-rw-rw-rw-   1 mfg      100      1463662 Feb  6 19:41 F836176T0E.FT2
-rw-rw-rw-   1 mfg      100      1453804 Feb  7 01:27 F836176T0E.FT3
-rw-rw-r--   1 1000     other    1449932 Feb  7 07:34 F836176T0E.FT4
-rw-rw-rw-   1 mfg      100      15129812 Feb  6 19:41 F836176T0E.SWM
-rw-rw-rw-   1 mfg      100      14572006 Feb  7 01:28 F836176T0E.TWM
........

我需要获取*.SWM,*.TWM,*.XWM的文件时间。谢谢!~
作者: Batcher    时间: 2009-4-3 16:29     标题: 回复 21楼 的帖子

  1. @echo off
  2. for /f "tokens=1-9 delims= " %%a in (a.txt) do (
  3.   if /i "%%~xi" equ ".SWM" (
  4.     echo %%i %%f %%g %%h
  5.   ) else if /i "%%~xi" equ ".TWM" (
  6.     echo %%i %%f %%g %%h
  7.   ) else if /i "%%~xi" equ ".XWM" (
  8.     echo %%i %%f %%g %%h
  9.   )
  10. )
  11. pause
复制代码

作者: lazygc520    时间: 2009-4-6 18:48

batcher,如果我要dir 这个txt文件信息怎么写呢? 像上面这个在指定ftp目录下的dir *a.txt。
作者: Batcher    时间: 2009-4-6 18:59     标题: 回复 23楼 的帖子

  1. @echo off
  2. rem 指定FTP用户名
  3. set ftpUser=BatHome
  4. rem 指定FTP密码
  5. set ftpPass=Batcher
  6. rem 指定FTP服务器地址
  7. set ftpIP=192.168.0.2
  8. set ftpFile=%temp%\TempAcc.txt
  9. >"%ftpFile%" echo %ftpUser%
  10. >>"%ftpFile%" echo %ftpPass%
  11. >>"%ftpFile%" echo bin
  12. >>"%ftpFile%" echo dir * a.txt
  13. >>"%ftpFile%" echo bye
  14. start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码

作者: lazygc520    时间: 2009-4-6 20:35

那我再问一个问题,batcher。如果我要把那个读txt的for循环(第22楼)我应该加在这里?
  1. @echo off
  2. rem 指定FTP用户名
  3. set ftpUser=USERNAME
  4. rem 指定FTP密码
  5. set ftpPass=PASSWORD
  6. rem 指定FTP服务器地址
  7. set ftpIP=192.168.0.2
  8. rem 指定待下载的文件位于FTP服务器的什么位置
  9. set ftpFolder=SharedFile\
  10. rem 指定从FTP下载下来的文件存放到什么地方
  11. set DownFolder=C:\temp\
  12. set ftpFile=%temp%\TempAcc.txt
  13. for /f "tokens=1-9 delims= " %%a in (a.txt) do (
  14.   if /i "%%~xi" equ ".SWM" (
  15.     echo %%i %%f %%g %%h
  16.   ) else if /i "%%~xi" equ ".TWM" (
  17.     echo %%i %%f %%g %%h
  18.   ) else if /i "%%~xi" equ ".XWM" (
  19.     echo %%i %%f %%g %%h
  20.   )
  21. )
  22. >"%ftpFile%" echo %ftpUser%
  23. >>"%ftpFile%" echo %ftpPass%
  24. >>"%ftpFile%" echo cd "%ftpFolder%"
  25. >>"%ftpFile%" echo lcd "%DownFolder%"
  26. >>"%ftpFile%" echo bin
  27. >>"%ftpFile%" echo dir * a.txt
  28. >>"%ftpFile%" echo bye
  29. start ftp -v -i -s:"%ftpFile%" %ftpIP%
  30. pause
复制代码



或者再添加一个调用?
作者: Batcher    时间: 2009-4-6 21:28     标题: 回复 25楼 的帖子

  1. @echo off
  2. rem 指定FTP用户名
  3. set ftpUser=USERNAME
  4. rem 指定FTP密码
  5. set ftpPass=PASSWORD
  6. rem 指定FTP服务器地址
  7. set ftpIP=192.168.0.2
  8. set ftpFile=%temp%\TempAcc.txt
  9. >"%ftpFile%" echo.%ftpUser%
  10. >>"%ftpFile%" echo.%ftpPass%
  11. >>"%ftpFile%" echo bin
  12. >>"%ftpFile%" echo dir * C:\BatHome.txt
  13. >>"%ftpFile%" echo bye
  14. start ftp -v -i -s:"%ftpFile%" %ftpIP%
  15. rem 根据实际情况自行调节延迟时间
  16. ping -n 10 127.1 >nul
  17. for /f "tokens=1-9 delims= " %%a in (C:\BatHome.txt) do (
  18.   if /i "%%~xi" equ ".SWM" (
  19.     echo.%%i %%f %%g %%h
  20.   ) else if /i "%%~xi" equ ".TWM" (
  21.     echo.%%i %%f %%g %%h
  22.   ) else if /i "%%~xi" equ ".XWM" (
  23.     echo.%%i %%f %%g %%h
  24.   )
  25. )
  26. pause
复制代码

作者: lazygc520    时间: 2009-4-6 22:35

非常感谢batcher的耐心指导!~
以上我获得了这些文件的时间信息,如果我要下载包含这些时间信息的文件,应该怎么获得?

[ 本帖最后由 lazygc520 于 2009-4-7 10:42 编辑 ]
作者: Batcher    时间: 2009-4-7 10:51     标题: 回复 27楼 的帖子

如果不对文件日期信息进行任何比较操作,那还绕个圈干吗?直接mget就行。
  1. mget *.SWM
  2. mget *.TWM
  3. mget *.XWM
复制代码

作者: lazygc520    时间: 2009-4-7 10:55

可能我没有表达清楚,我需要取这些文件的时间信息-1天的文件。
作者: lazygc520    时间: 2009-4-7 15:08

如果我获得了文件的时间信息,我想取这些 时间 -1 天的文件应该怎么操作?应该是指定目录下的。
set ftpFolder=\export\home\PROD\ntcdata\ ,取得*.SWM等文件,按SWM文件的时间信息取得该文件。

[ 本帖最后由 lazygc520 于 2009-4-7 16:10 编辑 ]
作者: Batcher    时间: 2009-4-7 22:47     标题: 回复 30楼 的帖子

  1. @echo off
  2. rem 指定FTP用户名
  3. set ftpUser=USERNAME
  4. rem 指定FTP密码
  5. set ftpPass=PASSWORD
  6. rem 指定FTP服务器地址
  7. set ftpIP=192.168.0.2
  8. rem 指定待下载的文件位于FTP服务器的什么位置
  9. set ftpFolder=\export\home\PROD\ntcdata\
  10. rem 指定下载几天前的文件
  11. set DaysAgo=1
  12. set ftpDir=%temp%\TempDir.txt
  13. set ftpDown=%temp%\TempDown.txt
  14. rem 假设本机日期格式为yyyy-mm-dd
  15. set FileY=%date:~0,4%
  16. call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
  17. set /a PassDays-=DaysAgo
  18. call :DaysToDate %PassDays% DstYear DstMonth DstDay
  19. >"%ftpDir%" echo.%ftpUser%
  20. >>"%ftpDir%" echo.%ftpPass%
  21. >>"%ftpDir%" echo bin
  22. >>"%ftpDir%" echo cd "%ftpFolder%"
  23. >>"%ftpDir%" echo dir * "%temp%\FileList.txt"
  24. >>"%ftpDir%" echo bye
  25. start ftp -v -i -s:"%ftpDir%" %ftpIP%
  26. rem 根据实际情况自行调节延迟时间
  27. ping -n 10 127.1 >nul
  28. findstr /i ":*\.SWM$" "%temp%\FileList.txt">"%temp%\FileDate.txt"
  29. findstr /i ":*\.TWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
  30. findstr /i ":*\.XWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
  31. >"%ftpDown%" echo.%ftpUser%
  32. >>"%ftpDown%" echo.%ftpPass%
  33. >>"%ftpDown%" echo bin
  34. >>"%ftpDown%" echo cd "%ftpFolder%"
  35. (for /f "usebackq tokens=1-9 delims= " %%a in ("%temp%\FileDate.txt") do (
  36.   setlocal enabledelayedexpansion
  37.   if "%%f" equ "Jan" (
  38.     set FileM=01
  39.   ) else if "%%f" equ "Feb" (
  40.     set FileM=02
  41.   ) else if "%%f" equ "Mar" (
  42.     set FileM=03
  43.   ) else if "%%f" equ "Apr" (
  44.     set FileM=04
  45.   ) else if "%%f" equ "May" (
  46.     set FileM=05
  47.   ) else if "%%f" equ "Jun" (
  48.     set FileM=06
  49.   ) else if "%%f" equ "Jul" (
  50.     set FileM=07
  51.   ) else if "%%f" equ "Aug" (
  52.     set FileM=08
  53.   ) else if "%%f" equ "Sep" (
  54.     set FileM=09
  55.   ) else if "%%f" equ "Oct" (
  56.     set FileM=10
  57.   ) else if "%%f" equ "Nov" (
  58.     set FileM=11
  59.   ) else if "%%f" equ "Dec" (
  60.     set FileM=12
  61.   )
  62.   set FileD=10%%g
  63.   set FileD=!FileD:~-2!
  64.   if "!FileM!" equ "%DstMonth%" (
  65.     if "!FileD!" equ "%DstDay%" (
  66.       echo get "%%i"
  67.     )
  68.   )
  69.   endlocal
  70. ))>>"%ftpDown%"
  71. >>"%ftpDown%" echo bye
  72. start ftp -v -i -s:"%ftpDown%" %ftpIP%
  73. goto :eof
  74. :DateToDays %yy% %mm% %dd% days
  75. setlocal ENABLEEXTENSIONS
  76. set yy=%1&set mm=%2&set dd=%3
  77. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  78. set /a dd=100%dd%%%100,mm=100%mm%%%100
  79. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  80. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  81. endlocal&set %4=%j%&goto :EOF
  82. :DaysToDate %days% yy mm dd
  83. setlocal ENABLEEXTENSIONS
  84. set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  85. 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
  86. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  87. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  88. endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
复制代码

[ 本帖最后由 Batcher 于 2009-4-7 22:50 编辑 ]
作者: lazygc520    时间: 2009-4-8 09:41

请问batcher,我获取文件不成功,是不是没有把文件放到本地指定的路径?
作者: Batcher    时间: 2009-4-8 09:48

仅凭一句“获取文件不成功”,我无法给你更多的帮助。
作者: lazygc520    时间: 2009-4-8 10:03

那请问程序的默认路径是在哪里?能不能指定路径?
作者: Batcher    时间: 2009-4-8 11:34     标题: 回复 34楼 的帖子

能指定路径
  1. @echo off
  2. rem 指定FTP用户名
  3. set ftpUser=USERNAME
  4. rem 指定FTP密码
  5. set ftpPass=PASSWORD
  6. rem 指定FTP服务器地址
  7. set ftpIP=192.168.0.2
  8. rem 指定待下载的文件位于FTP服务器的什么位置
  9. set ftpFolder=\export\home\PROD\ntcdata
  10. rem 指定从FTP下载下来的文件存放到什么地方
  11. set DownFolder=C:\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 10 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 ":*\.XWM$" "%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
复制代码

作者: lazygc520    时间: 2009-4-8 11:57     标题: 回复 35楼 的帖子

我已经试过了,还是抓不到文件。请问是否可以设置断点来排除错误?
作者: Batcher    时间: 2009-4-8 12:01     标题: 回复 36楼 的帖子

可以,随便设吧。
作者: lazygc520    时间: 2009-4-8 13:07

请问batcher,这两句是什么意思?
set ftpDir=%temp%\TempDir.txt      设置临时文件夹?
set ftpDown=%temp%\TempDown.txt   设置临时文件?
作者: Batcher    时间: 2009-4-8 13:26     标题: 回复 38楼 的帖子

是的,设置临时文件。
用来在后面的ftp命令中实现“自动”下载。
作者: lazygc520    时间: 2009-4-8 13:50

我在Temp文件夹下发现了两个文件,分别是TempDir.txt和TempDown.txt.
文件的内容TempDir.txt:
asx-asx
bin
cd "\export\home\PROD\ntcdata"
dir * "E:\DOCUME~1\eetc\LOCALS~1\Temp\FileList.txt"
bye

TempDown.txt:
asx
asx-asx
bin
cd "\export\home\PROD\ntcdata"
bye


但是我还是没有在set DownFolder=C:\temp(我的电脑上是E:\Temp)
获得*.SWM等文件。
作者: Batcher    时间: 2009-4-8 14:50     标题: 回复 40楼 的帖子

1、检查"%temp%\FileList.txt"文件内容是否正确
2、set DaysAgo=1,只下载昨天的问题,检查FTP服务器上指定目录下是否有昨天的文件
3、学学怎么调试代码吧:
不要双击运行
把代码保存为C:\test.bat
把@echo off删除
在合适的地方加上pause
开始
运行
cmd
C:\test.bat
看看执行过程再好好想想到底是哪里出问题了
作者: lazygc520    时间: 2009-4-8 15:02

FileList.txt的文件内容获取的是我连接上ftp时的默认目录:/export/home/asx/。那我怎样才能获得\export\home\PROD\ntcdata\目录下的文件内容呢?

[ 本帖最后由 lazygc520 于 2009-4-8 16:16 编辑 ]
作者: Batcher    时间: 2009-4-8 16:43     标题: 回复 42楼 的帖子

set ftpFolder=\export\home\PROD\ntcdata
>>"%ftpDir%" echo cd "%ftpFolder%"
>>"%ftpDir%" echo dir * "%temp%\FileList.txt"
自己试着改改这三句
作者: lazygc520    时间: 2009-4-8 17:21

我还是只能获取ftp链接上的默认路径::/export/home/asx/ 下的文件内容。
作者: Batcher    时间: 2009-4-8 17:30     标题: 回复 44楼 的帖子

你定义ftpFolder的时候咋写的?注意别把路径中的斜线和反斜线搞混淆了。
作者: lazygc520    时间: 2009-4-8 17:33

\\这样的形式。。。。
作者: Batcher    时间: 2009-4-8 17:37     标题: 回复 46楼 的帖子

windows的路径是\
*nix的路径是/
作者: lazygc520    时间: 2009-4-9 08:43

我刚刚试过了,Filelist.txt可以获取目录下的信息,但是相关的文件仍然无法下载。
作者: Batcher    时间: 2009-4-9 09:42     标题: 回复 48楼 的帖子

%temp%\TempDown.txt
内容如何?
作者: lazygc520    时间: 2009-4-9 09:46

asx
asx-asx
bin
cd "/export/home/PROD/ntcdata"
bye
作者: Batcher    时间: 2009-4-9 09:52

"%temp%\FileDate.txt"
这个呢?
作者: lazygc520    时间: 2009-4-9 09:59

"%temp%\FileDate.txt" 内容为空
作者: Batcher    时间: 2009-4-9 10:13     标题: 回复 52楼 的帖子

把代码保存为C:\test.bat
把@echo off删除
开始
运行
cmd
C:\test.bat
把完整的执行过程贴出来看看(尤其是生成"%temp%\FileDate.txt"那部分)

Q: 怎样把CMD窗口里的结果复制出来?
A: 右键单击CMD窗口的标题栏->"属性"->"选项"->勾选"快速编辑模式"->然后在CMD窗口用鼠标左键选中想要拷贝的内容->在选中的内容上单击鼠标右键->粘贴到文本文件中即可
作者: lazygc520    时间: 2009-4-9 10:20     标题: 回复 53楼 的帖子

我从test.bat抓取的信息:

  1. E:\Documents and Settings\eetc>F:\test.bat
  2. E:\Documents and Settings\eetc>rem 指定FTP用户名
  3. E:\Documents and Settings\eetc>set ftpUser=asx
  4. E:\Documents and Settings\eetc>rem 指定FTP密码
  5. E:\Documents and Settings\eetc>set ftpPass=asx-asx
  6. E:\Documents and Settings\eetc>rem 指定FTP服务器地址
  7. E:\Documents and Settings\eetc>set ftpIP=172.19.103.7
  8. E:\Documents and Settings\eetc>rem 指定待下载的文件位于FTP服务器的什么位置
  9. E:\Documents and Settings\eetc>set ftpFolder=/export/home/PROD/ntcdata
  10. E:\Documents and Settings\eetc>rem 指定从FTP下载下来的文件存放到什么地方
  11. E:\Documents and Settings\eetc>set DownFolder=E:\Temp
  12. E:\Documents and Settings\eetc>rem 指定下载几天前的文件
  13. E:\Documents and Settings\eetc>set DaysAgo=1
  14. E:\Documents and Settings\eetc>set ftpDir=E:\DOCUME~1\eetc\LOCALS~1\Temp\TempDir
  15. .txt
  16. E:\Documents and Settings\eetc>set ftpDown=E:\DOCUME~1\eetc\LOCALS~1\Temp\TempDo
  17. wn.txt
  18. E:\Documents and Settings\eetc>rem 假设本机日期格式为yyyy-mm-dd
  19. E:\Documents and Settings\eetc>set FileY=2009
  20. E:\Documents and Settings\eetc>call :DateToDays 2009 04 09 PassDays
  21. E:\Documents and Settings\eetc>setlocal ENABLEEXTENSIONS
  22. E:\Documents and Settings\eetc>set yy=2009  & set mm=04  & set dd=09
  23. E:\Documents and Settings\eetc>if 12009 LSS 200 if 12009 LSS 170 (set yy=202009
  24. )  else (set yy=192009 )
  25. E:\Documents and Settings\eetc>set /a dd=10009%100,mm=10004%100
  26. E:\Documents and Settings\eetc>set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=15
  27. 3*m+2
  28. E:\Documents and Settings\eetc>set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  29. E:\Documents and Settings\eetc>endlocal & set PassDays=14343  & goto :EOF
  30. E:\Documents and Settings\eetc>set /a PassDays-=DaysAgo
  31. E:\Documents and Settings\eetc>call :DaysToDate 14342 DstYear DstMonth DstDay
  32. E:\Documents and Settings\eetc>setlocal ENABLEEXTENSIONS
  33. E:\Documents and Settings\eetc>set /a a=14342+2472632,b=4*a+3,b/=146097,c=-b*146
  34. 097,c/=4,c+=a
  35. E:\Documents and Settings\eetc>set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+
  36. 2,m/=153,dd=153*m+2,dd/=5
  37. E:\Documents and Settings\eetc>set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*10
  38. 0+d-4800+m/10
  39. E:\Documents and Settings\eetc>(if 4 LSS 10 set mm=04 )  & (if 8 LSS 10 set dd=0
  40. 8 )
  41. E:\Documents and Settings\eetc>endlocal & set DstYear=2009  & set DstMonth=04  &
  42. set DstDay=08  & goto :EOF
  43. E:\Documents and Settings\eetc>echo.asx1>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempDir
  44. .txt"
  45. E:\Documents and Settings\eetc>echo.asx-asx1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\Te
  46. mpDir.txt"
  47. E:\Documents and Settings\eetc>echo bin 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempD
  48. ir.txt"
  49. E:\Documents and Settings\eetc>echo cd "/export/home/PROD/ntcdata" 1>>"E:\DOCUME
  50. ~1\eetc\LOCALS~1\Temp\TempDir.txt"
  51. E:\Documents and Settings\eetc>echo dir * "E:\DOCUME~1\eetc\LOCALS~1\Temp\FileLi
  52. st.txt" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempDir.txt"
  53. E:\Documents and Settings\eetc>echo bye 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempD
  54. ir.txt"
  55. E:\Documents and Settings\eetc>start ftp -v -i -s:"E:\DOCUME~1\eetc\LOCALS~1\Tem
  56. p\TempDir.txt" 172.19.103.7
  57. E:\Documents and Settings\eetc>rem 根据实际情况自行调节延迟时间
  58. E:\Documents and Settings\eetc>ping -n 10 127.1  1>nul
  59. E:\Documents and Settings\eetc>findstr /i ":*\.SWM$" "E:\DOCUME~1\eetc\LOCALS~1\
  60. Temp\FileList.txt" 1>"E:\DOCUME~1\eetc\LOCALS~1\Temp\FileDate.txt"
  61. E:\Documents and Settings\eetc>findstr /i ":*\.TWM$" "E:\DOCUME~1\eetc\LOCALS~1\
  62. Temp\FileList.txt" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\FileDate.txt"
  63. E:\Documents and Settings\eetc>findstr /i ":*\.XWM$" "E:\DOCUME~1\eetc\LOCALS~1\
  64. Temp\FileList.txt" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\FileDate.txt"
  65. E:\Documents and Settings\eetc>echo.asx1>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempDow
  66. n.txt"
  67. E:\Documents and Settings\eetc>echo.asx-asx1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\Te
  68. mpDown.txt"
  69. E:\Documents and Settings\eetc>echo bin 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempD
  70. own.txt"
  71. E:\Documents and Settings\eetc>echo cd "/export/home/PROD/ntcdata" 1>>"E:\DOCUME
  72. ~1\eetc\LOCALS~1\Temp\TempDown.txt"
  73. E:\Documents and Settings\eetc>(for /F "usebackq tokens=1-9 delims= " %a in ("E:
  74. \DOCUME~1\eetc\LOCALS~1\Temp\FileDate.txt") do (
  75. setlocal enabledelayedexpansion
  76. if "%f" EQU "Jan" (set FileM=01 )  else if "%f" EQU "Feb" (set FileM=02 )  else
  77. if "%f" EQU "Mar" (set FileM=03 )  else if "%f" EQU "Apr" (set FileM=04 )  else
  78. if "%f" EQU "May" (set FileM=05 )  else if "%f" EQU "Jun" (set FileM=06 )  else
  79. if "%f" EQU "Jul" (set FileM=07 )  else if "%f" EQU "Aug" (set FileM=08 )  else
  80. if "%f" EQU "Sep" (set FileM=09 )  else if "%f" EQU "Oct" (set FileM=10 )  else
  81. if "%f" EQU "Nov" (set FileM=11 )  else if "%f" EQU "Dec" (set FileM=12 )
  82. set FileD=10%g
  83. set FileD=!FileD:~-2!
  84. if "!FileM!" EQU "04" (if "!FileD!" EQU "08" (echo get "%i" ) )
  85. endlocal
  86. ) ) 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempDown.txt"
  87. E:\Documents and Settings\eetc>echo bye 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempD
  88. own.txt"
  89. E:\Documents and Settings\eetc>start ftp -v -i -s:"E:\DOCUME~1\eetc\LOCALS~1\Tem
  90. p\TempDown.txt" 172.19.103.7
  91. E:\Documents and Settings\eetc>goto :eof
复制代码

作者: lazygc520    时间: 2009-4-9 10:38

我一共获得了4个文件
作者: Batcher    时间: 2009-4-9 10:43     标题: 回复 54楼 的帖子

"E:\DOCUME~1\eetc\LOCALS~1\Temp\FileList.txt"
内容贴出来看看

还有,你手工执行一下findstr命令,看看为什么"E:\DOCUME~1\eetc\LOCALS~1\Temp\FileDate.txt"内容为空。
作者: Batcher    时间: 2009-4-9 10:50     标题: 回复 55楼 的帖子

FileList.txt中有1万多行数据,有可能是延迟不够。
你试试把延迟中的10改成20、30、40、50等,直到找到一个合适的延迟时间。

rem 根据实际情况自行调节延迟时间
ping -n 10 127.1 >nul
作者: lazygc520    时间: 2009-4-9 10:52

请问这个findstr命令怎么使用?
findstr path/file  ?
作者: lazygc520    时间: 2009-4-9 11:02

如果要同时把数据存入本地的两个文件夹应该怎么写?谢谢!~
作者: lazygc520    时间: 2009-4-9 11:12

我的文件内容已经可以取得了,但是并没有存到指定的文件夹,而是存到了桌面上。请问是怎么回事?
作者: Batcher    时间: 2009-4-9 11:52     标题: 回复 60楼 的帖子

仔细看看35楼的代码:
      echo get "%%i" "%DownFolder%\%%i"
作者: lazygc520    时间: 2009-4-9 13:01     标题: 回复 61楼 的帖子

谢谢,那如果要把数据同时存入2个文件夹怎么写?
作者: Batcher    时间: 2009-4-9 13:09     标题: 回复 62楼 的帖子

你把现在最新的完整代码贴出来,我帮你加上这个功能。
作者: lazygc520    时间: 2009-4-9 13:12     标题: 回复 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
复制代码

作者: Batcher    时间: 2009-4-9 13:57     标题: 回复 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
复制代码

作者: lazygc520    时间: 2009-4-9 14:08

如果我能保证在15分钟内完成ftp下载,按照第一种思路,复制的代码如何实现?
作者: Batcher    时间: 2009-4-9 14:20     标题: 回复 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
复制代码

作者: Batcher    时间: 2009-4-9 14:21

如果想采取其它延时方法,可参考:批处理中的延时
http://bbs.bathome.net/viewthread.php?tid=233
http://bbs.bathome.net/viewthread.php?tid=3693#pid23312
作者: Qiqiqiqi    时间: 2018-4-28 19:50

请问我运行这个脚本的时候,FileList.txt根本没有生成,请高手指点为什么。谢谢!
作者: Batcher    时间: 2018-5-3 09:31

回复 69# Qiqiqiqi


    你运行的几楼的脚本?




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