标题: [文件操作] 【已解决】批处理下载FTP文件后如何存放到指定目录? [打印本页]
作者: lazygc520 时间: 2009-4-9 18:56 标题: 【已解决】批处理下载FTP文件后如何存放到指定目录?
- @echo off
- set ftpUser=xxx
- set ftpPass=XXX
- set ftpIP=xxx
- set ftpFolder=/path/
- set DownFolder=F:\path\
- >"%tmp%\MyDel.vbs" echo dt=date()-1
- >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
- >>"%tmp%\MyDel.vbs" echo wscript.echo s
- for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
- set ftpFile=%temp%\TempAcc.txt
- >"%ftpFile%" echo %ftpUser%
- >>"%ftpFile%" echo %ftpPass%
- >>"%ftpFile%" echo cd "%ftpFolder%"
- >>"%ftpFile%" echo lcd "%DownFolder%"
- >>"%ftpFile%" echo bin
- >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt
- >>"%ftpFile%" echo bye
- start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码
这是一个从ftp上下载获得文件的程序,虽然指定了路径,但是文件默认存在了batch文件运行的目录下,请问这是怎么回事?【】
[ 本帖最后由 lazygc520 于 2009-4-10 16:38 编辑 ]
作者: Batcher 时间: 2009-4-9 21:06
- @echo off
- set ftpUser=xxx
- set ftpPass=XXX
- set ftpIP=xxx
- set ftpFolder=/path/
- set DownFolder=F:\path\
- >"%tmp%\MyDel.vbs" echo dt=date()-1
- >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
- >>"%tmp%\MyDel.vbs" echo wscript.echo s
- for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
- set ftpFile=%temp%\TempAcc.txt
- >"%ftpFile%" echo %ftpUser%
- >>"%ftpFile%" echo %ftpPass%
- >>"%ftpFile%" echo cd "%ftpFolder%"
- >>"%ftpFile%" echo bin
- >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt "%DownFolder%"
- >>"%ftpFile%" echo bye
- 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
执行的代码:
- E:\Documents and Settings\eetc>e:\test.bat
-
- E:\Documents and Settings\eetc>rem 指定FTP用户名
-
- E:\Documents and Settings\eetc>set ftpUser=asx
-
- E:\Documents and Settings\eetc>rem 指定FTP密码
-
- E:\Documents and Settings\eetc>set ftpPass=asx-asx
-
- E:\Documents and Settings\eetc>rem 指定FTP服务器地址
-
- E:\Documents and Settings\eetc>set ftpIP=172.19.103.7
-
- E:\Documents and Settings\eetc>rem 指定待下载的文件位于FTP服务器的什么位置
-
- E:\Documents and Settings\eetc>set ftpFolder=/export/home/PROD/dutdata/T5581-01/
-
-
- E:\Documents and Settings\eetc>rem 指定从FTP下载下来的文件存放到什么地方
-
- E:\Documents and Settings\eetc>set DownFolder=F:\AppServ\www\BadDut\data\switch\
- T5581-01\
-
- E:\Documents and Settings\eetc>echo dt=date()-1 1>"E:\DOCUME~1\eetc\LOCALS~1\Tem
- p\MyDel.vbs"
-
- E:\Documents and Settings\eetc>echo s=right(year(dt),4) & right("0" & month(dt),
- 2) & right("0" & day(dt),2) 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\MyDel.vbs"
-
- E:\Documents and Settings\eetc>echo wscript.echo s 1>>"E:\DOCUME~1\eetc\LOCALS~1
- \Temp\MyDel.vbs"
-
- E:\Documents and Settings\eetc>for /F %a in ('cscript /nologo "E:\DOCUME~1\eetc\
- LOCALS~1\Temp\MyDel.vbs"') do set yesterday=%a
-
- E:\Documents and Settings\eetc>set yesterday=20090409
-
- E:\Documents and Settings\eetc>set ftpFile=E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAc
- c.txt
-
- E:\Documents and Settings\eetc>echo asx 1>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAc
- c.txt"
-
- E:\Documents and Settings\eetc>echo asx-asx 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\T
- empAcc.txt"
-
- E:\Documents and Settings\eetc>echo cd "/export/home/PROD/dutdata/T5581-01/" 1>>
- "E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.txt"
-
- E:\Documents and Settings\eetc>echo bin 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempA
- cc.txt"
-
- E:\Documents and Settings\eetc>echo mget DSTAT_1PASS.*.20090409*.txt "F:\AppServ
- \www\BadDut\data\switch\T5581-01\" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.tx
- t"
-
- E:\Documents and Settings\eetc>echo bye 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempA
- cc.txt"
-
- E:\Documents and Settings\eetc>start ftp -v -i -s:"E:\DOCUME~1\eetc\LOCALS~1\Tem
- p\TempAcc.txt" 172.19.103.7
复制代码
请问
-
- E:\Documents and Settings\eetc>echo mget DSTAT_1PASS.*.20090409*.txt "F:\AppServ
- \www\BadDut\data\switch\T5581-01\" 1>>"E:\DOCUME~1\eetc\LOCALS~1\Temp\TempAcc.tx
- 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楼 的帖子
- asx
- asx-asx
- cd "/export/home/PROD/dutdata/T5581-01/"
- bin
- mget DSTAT_1PASS.*.20090409*.txt "F:\AppServ\www\BadDut\data\switch\T5581-01\"
- bye
复制代码
作者: zqz0012005 时间: 2009-4-10 13:58
mget不支持指定目标目录,会它们都当作服务器上的目录进行下载。
顶楼的代码你确定不行吗?set DownFolder=F:\path\ 把它改成你的目标目录,再把%temp%\TempAcc.txt内容帖出来看看。
作者: lazygc520 时间: 2009-4-10 14:06
- asx
- asx-asx
- cd "/export/home/PROD/dutdata/T5581-01/"
- lcd "F:\AppServ\www\BadDut\data\switch\T5581-01\"
- bin
- mget DSTAT_1PASS.*.20090409*.txt
- bye
复制代码
作者: Batcher 时间: 2009-4-10 14:32
- @echo off
- set ftpUser=xxx
- set ftpPass=XXX
- set ftpIP=xxx
- set ftpFolder=/path/
- set DownFolder=F:\path\
- >"%tmp%\MyDel.vbs" echo dt=date()-1
- >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
- >>"%tmp%\MyDel.vbs" echo wscript.echo s
- for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
- set ftpFile=%temp%\TempAcc.txt
- >"%ftpFile%" echo %ftpUser%
- >>"%ftpFile%" echo %ftpPass%
- >>"%ftpFile%" echo cd "%ftpFolder%"
- >>"%ftpFile%" echo ! cd /d "%DownFolder%"
- >>"%ftpFile%" echo bin
- >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt
- >>"%ftpFile%" echo bye
- start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码
作者: lazygc520 时间: 2009-4-10 14:40
- ! cd /d "F:\AppServ\www\BadDut\data\switch\T5581-01\"
复制代码
请问batcher,这句是什么意思?Download文件还是下载在了batch程序执行的地方。
附上我的TempAcc.txt- asx
- asx-asx
- cd "/export/home/PROD/dutdata/T5581-01/"
- ! cd /d "F:\AppServ\www\BadDut\data\switch\T5581-01\"
- bin
- mget DSTAT_1PASS.*.20090409*.txt
- 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楼 的帖子
- @echo off
- set ftpUser=xxx
- set ftpPass=XXX
- set ftpIP=xxx
- set ftpFolder=/path/
- set DownFolder=F:\path\
- >"%tmp%\MyDel.vbs" echo dt=date()-1
- >>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
- >>"%tmp%\MyDel.vbs" echo wscript.echo s
- for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set yesterday=%%a
- set ftpFile=%temp%\TempAcc.txt
- >"%ftpFile%" echo %ftpUser%
- >>"%ftpFile%" echo %ftpPass%
- >>"%ftpFile%" echo cd "%ftpFolder%"
- >>"%ftpFile%" echo bin
- >>"%ftpFile%" echo mget DSTAT_1PASS.*.%yesterday%*.txt
- >>"%ftpFile%" echo bye
- start ftp -v -i -s:"%ftpFile%" %ftpIP%
-
- rem 根据实际情况自行调节延迟时间
- ping -n 600 127.1 >nul
-
- move /y DSTAT_1PASS.*.%yesterday%*.txt "%DownFolder%"
复制代码
作者: lazygc520 时间: 2009-4-10 16:17
经测试通过,可以用。谢谢l楼上两位仁兄的帮忙!
顺便再问个以外的话题,如果有N个这样的程序按顺序先后执行,是不是要清空TempAcc.txt的内容?
假如像以下的代码:- start /wait /b cmd /c T5581-01.cmd
- ping -n 10 127.1 >nul
- start /wait /b cmd /c T5581-02.cmd
- ping -n 10 127.1 >nul
- start /wait /b cmd /c T5581-03.cmd
- ping -n 10 127.1 >nul
- start /wait /b cmd /c T5581-04.cmd
- ping -n 10 127.1 >nul
- start /wait /b cmd /c T5581-05.cmd
- ping -n 10 127.1 >nul
- ........
复制代码
[ 本帖最后由 lazygc520 于 2009-4-10 16:20 编辑 ]
作者: Batcher 时间: 2009-4-10 16:27 标题: 回复 17楼 的帖子
不需要
代码会自动清空的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |