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

[文件操作] 【已解决】批处理下载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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 17楼 的帖子

不需要
代码会自动清空的
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

经测试通过,可以用。谢谢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 编辑 ]

TOP

回复 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%"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

!运行本地命令。但是一次性的,每次运行后都会还原为初始环境。所以用!来改变目录还是不行的。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

可能是ftp服务器的设置会影响命令运行结果。
我随便找了个ftp软件,mget只能下载目录,不支持通配符。使用lcd设置下载目录正常。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

  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 编辑 ]

TOP

  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%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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
复制代码

TOP

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

顶楼的代码你确定不行吗?set DownFolder=F:\path\ 把它改成你的目标目录,再把%temp%\TempAcc.txt内容帖出来看看。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 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
复制代码

TOP

"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.txt"
内容如何?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

执行的代码:
  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 编辑 ]

TOP

回复 5楼 的帖子

学学怎么调试代码吧:
不要双击运行
把代码保存为C:\test.bat
把@echo off删除
开始
运行
cmd
C:\test.bat
看看执行过程再好好想想,如果想不通,就贴出来让别人帮你讲解。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

今天试过了,发现了昨天一样的结果。。。
下载的数据还是存放在了batch程序执行的目录。。。。
请问下batcher怎么样可以解决?

TOP

返回列表