标题: 有关ftp下载、上传的批处理编写经验
[打印本页]
作者: exzzz
时间: 2010-4-15 12:20
标题: 有关ftp下载、上传的批处理编写经验
最近看到很多人问ftp相关的问题,正好几年前我写过一个ftp上传下载的脚本,就简单的总结一下ftp批处理的几点经验,希望能对新手有所帮助
1、如何在批处理中调用ftp?
将你要在ftp中操作的命令输出到某个txt文件,然后用ftp -s命令运行该脚本
首先
echo todo1>xxx.txt
echo todo2>>xxx.txt
echo todo3>>xxx.txt
然后使用 ftp -s:xxx.txt 就可以执行了
2、ftp下支持的命令有哪些?常用的又有哪些?
支持的命令请看如下输出
C:\Users\Administrator>ftp
ftp> help
最常用的命令有:
! 临时切换到cmd下执行某个外部命令,执行后返回ftp命令行
open XXX.XXX.XXX.XXX 连接到某个ftp服务器IP
user/pwd 切换用户名/密码(pwd在serv-u下貌似没有效果),一般open后直接依序输入用户名密码即可,但是实际测试,在批处理中生成txt再用ftp -s的话,密码后需要加多个空格,否则可能服务器无法继续下一步。(ftp服务端是serv-u)
cd 在服务器端切换目录(ftp服务器端保存文件的目录),即远端目录(以下简称远端)
lcd 指定本地目录(本地保存文件的目录),即本地目录(以下简称本地)
ascii/binary 使用ascii或binary传输模式,分别主要用于文本/程序文件,一般情况下不需修改,如果下载的程序出错,尝试用bin传输
delete 删除远端的文件
dir/ls 列出远端文件的目录
put 用法是put xxx 将本地lcd指定目录中的xxx文件上传到远端cd指定的目录
get 用法是get xxx 将远端的xxx文件下载到本地目录
mdelete/mdir/mget 想象成对应命令的 XXX * 版本吧,我没用过
mkdir 在远端创建目录
prompt 修改提示符(没用过,应该是这样)
rename 远端更改文件名
rmdir 远端删除文件夹
bye 断开连接
3、ftp手动操作的步骤
ftp :运行ftp命令
open 58.61.XXX.XXX :链接到ftp服务器
username :用户名
password :密码
hash :忘记干嘛的了。。。
bin :二进制传输文件,我的是个exe程序
cd bak :远端目录切换到 .\bak
lcd e:\bak :本地目录切换到 e:\bak
ls . e:\bak\filelist.txt :读取远端目录.\bak下的文件列表并输出到本地文件 e:\bak\filelist.txt
quit :断开连接,退出ftp
4、使用脚本控制ftp
将例子3中的每一行前面加上echo 后面加上>>job.txt
然后在最后一行写上 ftp -s:job.txt
并将所有行保存为 XXX.bat ,运行就可以自动执行这些操作了。
5、如何登陆服务器并下载最新版本的程序?
这里提供最简单的一种构想,即远端目录下所有文件,都以 XXXX20100312.rar 之类的格式保存,那么只需要修改日期,默认是按照日期先后排列的,那么最后一个文件,就是最新的了,
所以你可以先用例子3生成 e:\bak\filelist.txt 文件,里面最后一行,就是最新的版本的文件名了,在获取到 filelist.txt之后
for /f %%a in (filelist.txt) do set newver=%%a
即可将 newver 变量设置为最后那行文件名,然后再新建一个jobtodo.txt,内容跟job.txt 完全一样,只是将“ls . e:\bak\filelist.txt”替换成 get %newver%,那么就可以下载到你所需要的版本了
附录程序如下:
xxx.bat 内容
echo open 58.61.XXX.XXX>>e:\bak\job.txt
echo username>>e:\bak\job.txt
:注意下面password之后有个空格
echo password >>e:\bak\job.txt
echo hash>>e:\bak\job.txt
echo bin>>e:\bak\job.txt
echo lcd e:\bak>>e:\bak\job.txt
echo cd bak>>e:\bak\job.txt
echo ls . e:\bak\filelist.txt>>e:\bak\job.txt
echo quit>>e:\bak\job.txt
ftp -s:e:\bak\job.txt
在运行xxx.bat之后,可以看到生成了e:\bak\filelist.txt这个文件,然后运行下面的yyy.bat,就能在e:\bak下面找到你要的文件了
yyy.bat 的内容
for /f %%a in (e:\bak\filelist.txt) do set newver=%%a
echo open 58.61.XXX.XXX>>e:\bak\jobtodo.txt
echo username>>e:\bak\jobtodo.txt
echo password >>e:\bak\jobtodo.txt
echo hash>>e:\bak\jobtodo.txt
echo bin>>e:\bak\jobtodo.txt
echo lcd e:\bak>>e:\bak\jobtodo.txt
echo cd bak>>e:\bak\jobtodo.txt
get %newver%>>e:\bak\jobtodo.txt
echo quit>>e:\bak\jobtodo.txt
ftp -s:e:\bak\jobtodo.txt
当然,你把以上两段的内容写在一个bat里面,效果是一样的,我分开写只是为了让你明白两个文件内容差异很小,完全可以做成一段,在关键的几个位置加多一个 ! if 命令,看是否 exist 某个文件 的判断就可以了极大的缩小代码尺寸了。
[
Last edited by exzzz on 2010-4-15 at 12:56 ]
作者: HAT
时间: 2010-4-15 18:25
还有下载整个FTP目录、上传本地整个目录、下载指定日期之前的文件、下载几分钟之前的文件等等。