Board logo

标题: [文件操作] 【已解决】批处理下载FTP文件后如何存放到指定目录? [打印本页]

作者: lazygc520    时间: 2009-4-9 18:56     标题: 【已解决】批处理下载FTP文件后如何存放到指定目录?

  1. @echo off
  2. set ftpUser=xxx
  3. set ftpPass=XXX
  4. set ftpIP=xxx
  5. set ftpFolder=/path/
  6. set DownFolder=F:\path\
  7. >"%tmp%\MyDel.vbs" echo dt=date()-1
  8. >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
  9. >>"%tmp%\MyDel.vbs" echo wscript.echo s
  10. for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
  11. set ftpFile=%temp%\TempAcc.txt
  12. >"%ftpFile%" echo %ftpUser%
  13. >>"%ftpFile%" echo %ftpPass%
  14. >>"%ftpFile%" echo cd "%ftpFolder%"
  15. >>"%ftpFile%" echo lcd "%DownFolder%"
  16. >>"%ftpFile%" echo bin
  17. >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt
  18. >>"%ftpFile%" echo bye
  19. start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码
这是一个从ftp上下载获得文件的程序,虽然指定了路径,但是文件默认存在了batch文件运行的目录下,请问这是怎么回事?【】

[ 本帖最后由 lazygc520 于 2009-4-10 16:38 编辑 ]
作者: Batcher    时间: 2009-4-9 21:06

  1. @echo off
  2. set ftpUser=xxx
  3. set ftpPass=XXX
  4. set ftpIP=xxx
  5. set ftpFolder=/path/
  6. set DownFolder=F:\path\
  7. >"%tmp%\MyDel.vbs" echo dt=date()-1
  8. >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
  9. >>"%tmp%\MyDel.vbs" echo wscript.echo s
  10. for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
  11. set ftpFile=%temp%\TempAcc.txt
  12. >"%ftpFile%" echo %ftpUser%
  13. >>"%ftpFile%" echo %ftpPass%
  14. >>"%ftpFile%" echo cd "%ftpFolder%"
  15. >>"%ftpFile%" echo bin
  16. >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt "%DownFolder%"
  17. >>"%ftpFile%" echo bye
  18. start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码

作者: lazygc520    时间: 2009-4-9 21:21

非常感谢batcher,我发现我现在对批处理的知识非常欠缺,请问一般新手入门在哪个版块,请给个链接,谢谢!
作者: Batcher    时间: 2009-4-9 21:25     标题: 回复 3楼 的帖子

可以先到教学区看教程
然后到练功区练习
作者: lazygc520    时间: 2009-4-10 10:41

今天试过了,发现了昨天一样的结果。。。
下载的数据还是存放在了batch程序执行的目录。。。。
请问下batcher怎么样可以解决?
作者: Batcher    时间: 2009-4-10 11:06     标题: 回复 5楼 的帖子

学学怎么调试代码吧:
不要双击运行
把代码保存为C:\test.bat
把@echo off删除
开始
运行
cmd
C:\test.bat
看看执行过程再好好想想,如果想不通,就贴出来让别人帮你讲解。
作者: lazygc520    时间: 2009-4-10 12:14

执行的代码:
  1. E:\Documents and Settings\eetc>e:\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/dutdata/T5581-01/
  10. E:\Documents and Settings\eetc>rem 指定从FTP下载下来的文件存放到什么地方
  11. E:\Documents and Settings\eetc>set DownFolder=F:\AppServ\www\BadDut\data\switch\
  12. T5581-01\
  13. E:\Documents and Settings\eetc>echo dt=date()-1 1>"E:\DOCUME~1\eetc\LOCALS~1\Tem
  14. p\MyDel.vbs"
  15. E:\Documents and Settings\eetc>echo s=right(year(dt),4) & right("0" & month(dt),
  16. 2) & right("0" & day(dt),2) 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\MyDel.vbs"
  17. E:\Documents and Settings\eetc>echo wscript.echo s 1>>"E:\DOCUME~1\eetc\LOCALS~1
  18. \Temp\MyDel.vbs"
  19. E:\Documents and Settings\eetc>for /F %a in ('cscript /nologo "E:\DOCUME~1\eetc\
  20. LOCALS~1\Temp\MyDel.vbs"') do set yesterday=%a
  21. E:\Documents and Settings\eetc>set yesterday=20090409
  22. E:\Documents and Settings\eetc>set ftpFile=E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAc
  23. c.txt
  24. E:\Documents and Settings\eetc>echo asx 1>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAc
  25. c.txt"
  26. E:\Documents and Settings\eetc>echo asx-asx 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\T
  27. empAcc.txt"
  28. E:\Documents and Settings\eetc>echo cd "/export/home/PROD/dutdata/T5581-01/" 1>>
  29. "E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.txt"
  30. E:\Documents and Settings\eetc>echo bin 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempA
  31. cc.txt"
  32. E:\Documents and Settings\eetc>echo mget DSTAT_1PASS.*.20090409*.txt "F:\AppServ
  33. \www\BadDut\data\switch\T5581-01\" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.tx
  34. t"
  35. E:\Documents and Settings\eetc>echo bye 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempA
  36. cc.txt"
  37. E:\Documents and Settings\eetc>start ftp -v -i -s:"E:\DOCUME~1\eetc\LOCALS~1\Tem
  38. p\TempAcc.txt" 172.19.103.7
复制代码


请问
  1. E:\Documents and Settings\eetc>echo mget DSTAT_1PASS.*.20090409*.txt "F:\AppServ
  2. \www\BadDut\data\switch\T5581-01\" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.tx
  3. t"
复制代码

是怎么回事?

[ 本帖最后由 lazygc520 于 2009-4-10 12:17 编辑 ]
作者: Batcher    时间: 2009-4-10 12:56

"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.txt"
内容如何?
作者: lazygc520    时间: 2009-4-10 13:02     标题: 回复 8楼 的帖子

  1. asx
  2. asx-asx
  3. cd "/export/home/PROD/dutdata/T5581-01/"
  4. bin
  5. mget DSTAT_1PASS.*.20090409*.txt "F:\AppServ\www\BadDut\data\switch\T5581-01\"
  6. bye
复制代码

作者: zqz0012005    时间: 2009-4-10 13:58

mget不支持指定目标目录,会它们都当作服务器上的目录进行下载。

顶楼的代码你确定不行吗?set DownFolder=F:\path\ 把它改成你的目标目录,再把%temp%\TempAcc.txt内容帖出来看看。
作者: lazygc520    时间: 2009-4-10 14:06

  1. asx
  2. asx-asx
  3. cd "/export/home/PROD/dutdata/T5581-01/"
  4. lcd "F:\AppServ\www\BadDut\data\switch\T5581-01\"
  5. bin
  6. mget DSTAT_1PASS.*.20090409*.txt
  7. bye
复制代码

作者: Batcher    时间: 2009-4-10 14:32

  1. @echo off
  2. set ftpUser=xxx
  3. set ftpPass=XXX
  4. set ftpIP=xxx
  5. set ftpFolder=/path/
  6. set DownFolder=F:\path\
  7. >"%tmp%\MyDel.vbs" echo dt=date()-1
  8. >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
  9. >>"%tmp%\MyDel.vbs" echo wscript.echo s
  10. for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
  11. set ftpFile=%temp%\TempAcc.txt
  12. >"%ftpFile%" echo %ftpUser%
  13. >>"%ftpFile%" echo %ftpPass%
  14. >>"%ftpFile%" echo cd "%ftpFolder%"
  15. >>"%ftpFile%" echo ! cd /d "%DownFolder%"
  16. >>"%ftpFile%" echo bin
  17. >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt
  18. >>"%ftpFile%" echo bye
  19. start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码

作者: lazygc520    时间: 2009-4-10 14:40

  1. ! cd /d "F:\AppServ\www\BadDut\data\switch\T5581-01\"
复制代码
请问batcher,这句是什么意思?Download文件还是下载在了batch程序执行的地方。

附上我的TempAcc.txt
  1. asx
  2. asx-asx
  3. cd "/export/home/PROD/dutdata/T5581-01/"
  4. ! cd /d "F:\AppServ\www\BadDut\data\switch\T5581-01\"
  5. bin
  6. mget DSTAT_1PASS.*.20090409*.txt
  7. bye
复制代码


我想也许换个思路可以,将下载好的文件“剪切”到指定的目录,不知道能不能实现?

[ 本帖最后由 lazygc520 于 2009-4-10 15:13 编辑 ]
作者: zqz0012005    时间: 2009-4-10 15:31

可能是ftp服务器的设置会影响命令运行结果。
我随便找了个ftp软件,mget只能下载目录,不支持通配符。使用lcd设置下载目录正常。
作者: zqz0012005    时间: 2009-4-10 15:35

!运行本地命令。但是一次性的,每次运行后都会还原为初始环境。所以用!来改变目录还是不行的。
作者: Batcher    时间: 2009-4-10 15:40     标题: 回复 13楼 的帖子

  1. @echo off
  2. set ftpUser=xxx
  3. set ftpPass=XXX
  4. set ftpIP=xxx
  5. set ftpFolder=/path/
  6. set DownFolder=F:\path\
  7. >"%tmp%\MyDel.vbs" echo dt=date()-1
  8. >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
  9. >>"%tmp%\MyDel.vbs" echo wscript.echo s
  10. for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
  11. set ftpFile=%temp%\TempAcc.txt
  12. >"%ftpFile%" echo %ftpUser%
  13. >>"%ftpFile%" echo %ftpPass%
  14. >>"%ftpFile%" echo cd "%ftpFolder%"
  15. >>"%ftpFile%" echo bin
  16. >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt
  17. >>"%ftpFile%" echo bye
  18. start ftp -v -i -s:"%ftpFile%" %ftpIP%
  19. rem 根据实际情况自行调节延迟时间
  20. ping -n 600 127.1 >nul
  21. move /y DSTAT_1PASS.*.%yesterday%*.txt "%DownFolder%"
复制代码

作者: lazygc520    时间: 2009-4-10 16:17

经测试通过,可以用。谢谢l楼上两位仁兄的帮忙!
顺便再问个以外的话题,如果有N个这样的程序按顺序先后执行,是不是要清空TempAcc.txt的内容?
假如像以下的代码:
  1. start /wait  /b cmd /c T5581-01.cmd
  2. ping -n 10 127.1 >nul
  3. start  /wait /b cmd /c T5581-02.cmd
  4. ping -n 10 127.1 >nul
  5. start /wait  /b cmd /c T5581-03.cmd
  6. ping -n 10 127.1 >nul
  7. start /wait  /b cmd /c T5581-04.cmd
  8. ping -n 10 127.1 >nul
  9. start /wait  /b cmd /c T5581-05.cmd
  10. ping -n 10 127.1 >nul
  11. ........
复制代码

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

不需要
代码会自动清空的




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