标题: ftp怎样批量上传?
[打印本页]
作者: geminidos
时间: 2010-4-6 13:20
标题: ftp怎样批量上传?
要将本地D盘下ftp文件夹下所有文件及文件夹含子目录覆盖到服务器上
:: ftp信息
set ftpServer=133.0.0.1
set ftpUserName=sa
set ftpPassword=sa
:: ftp上传程序
echo open %ftpServer% >ftp.tmp
echo %ftpUserName%>>ftp.tmp
echo %ftpPassword%>>ftp.tmp
echo bin >>ftp.tmp
echo bell >>ftp.tmp
echo cd web >>ftp.tmp
后面就不会了。。。。
作者: exzzz
时间: 2010-4-8 16:11
ftp下上传是put命令,下载是get吧,很久没用忘记了,应该是这个。
你搜索一下 ftp.exe 的帮助文件。另外有个要注意的地方,密码最好不要有空格,另外可能会遇到密码之后不继续的问题,很容易解决,
echo %ftpPassword%>>ftp.tmp
修改成
echo %ftpPassword% >>ftp.tmp
password后面加多一个空格就可以当回车来用了。
作者: lxmxn
时间: 2010-4-9 22:55
ftp -s:filename
作者: geminidos
时间: 2010-4-10 08:28
俄,又学到知识了,感谢二楼,版主大人,-s可以批量上传么?文件夹也可以?
作者: HAT
时间: 2010-4-10 14:06
标题: Re 4 楼
需要自己写代码遍历文件夹
作者: pdanniel66
时间: 2010-4-11 06:32
我也有批量上传需求 (遍历文件夹),但搜寻不到,是否可以帮忙搜寻或提供代码,谢谢
作者: exzzz
时间: 2010-4-12 11:21
给你个例子吧,很久以前写的了,那时候还不熟,所以有很多绕来绕去的地方,而且两个文件实际可以合写成一个,有些地方可以模块化处理。
但是就不修改了,看看我那时候简单点的思维,你或许更容易理解。
当时的目的是,运行程序后能连接到公司ftp服务器,自动登录并获取可用的软件版本列表,并下载最新版本的软件回来,然后解压、并运行新版的软件。
用法:
注意这两个文件要放在 e:\bak 文件夹下面运行,不想放那里就修改一下。
将下面这段随便保存为个什么 .bat 就好了,这个是主程序,把IP跟用户名密码替换掉。
@echo off&cls
md e:\bak\temp
del /f /y /q e:\bak\temp\*.*
cls
:获得文件列表
echo !cls>>e:\bak\temp\new.txt
echo !echo off >e:\bak\temp\new.txt
echo !title 本程序由exzzz制作,正在下载最新的备份文件,请不要关闭本窗口!>>e:\bak\temp\new.txt
echo !cls>>e:\bak\temp\new.txt
echo !del /f e:\bak\bak.rar>>e:\bak\temp\new.txt
echo !cls>>e:\bak\temp\new.txt
echo open 58.61.XXX.XXX>>e:\bak\temp\new.txt
echo ch>>e:\bak\temp\new.txt
echo 1 >>e:\bak\temp\new.txt
echo hash>>e:\bak\temp\new.txt
echo bin>>e:\bak\temp\new.txt
echo lcd e:\bak>>e:\bak\temp\new.txt
echo cd chzs\exzzz\bak>>e:\bak\temp\new.txt
echo ls . e:\bak\temp\baklist.txt>>e:\bak\temp\new.txt
:下一行调用批处理生成新的任务文件
echo !call e:\bak\getbak.bat>>e:\bak\temp\new.txt
echo quit>>e:\bak\temp\new.txt
:运行前面的程序,以产生文件列表
ftp -s:e:\bak\temp\new.txt
:运行ftp生成的任务文件
ftp -s:e:\bak\temp\newjob.txt
下面这段就一定要保存为 getbak.bat 了,并且与上一个文件放在一个目录里面。IP,账号什么的自己修改好
@echo off&cls
echo =====================================
echo.
for /f "tokens=2 delims=k." %%a in (e:\bak\temp\baklist.txt) do (echo 检测到资源管理系统%%a版&set bakfile=%%a)
rem ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
goto end
:因为发现实在太多XXX不明白按C后按Y是什么意思,所以直接简化
:不显示手动选择版本了,直接下最新版本好了
:相当的郁闷,为什么现在那么多XXX没有一点理解能力.....
:如果日后需要,将☆之间的内容删除即可恢复为可手动选择的版本
rem ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:choz
echo =====================================
echo 以上是可供选择的版本,请选择任务...
echo =====================================
echo 按 Y 将默认下载 资源系统 %bakfile% 版
echo 按 N 手动输入版号下载指定的版本
echo =====================================
echo 如果只是误操作,请直接关闭本窗口
choice /c YN /n
if %ERRORLEVEL% equ 1 goto end
if %ERRORLEVEL% equ 2 goto man
:man
set /p bakfile=请手动输入要下载的版本号,例如 0420 :
:end
:获得任务文件
echo !cls>>e:\bak\temp\newjob.txt
echo !echo off >e:\bak\temp\newjob.txt
echo !title 本程序由exzzz制作,正在下载最新的程序文件,请不要关闭本窗口!>>e:\bak\temp\newjob.txt
echo !del /f e:\bak\bak.rar>>e:\bak\temp\newjob.txt
echo !cls>>e:\bak\temp\newjob.txt
echo open 58.61.XXX.XXX>>e:\bak\temp\newjob.txt
echo ch>>e:\bak\temp\newjob.txt
echo 1 >>e:\bak\temp\newjob.txt
echo hash>>e:\bak\temp\newjob.txt
echo bin>>e:\bak\temp\newjob.txt
echo lcd e:\bak>>e:\bak\temp\newjob.txt
echo cd chzs\exzzz\bak>>e:\bak\temp\newjob.txt
echo !cls>>e:\bak\temp\newjob.txt
echo get bak%bakfile%.rar bak.rar>>e:\bak\temp\newjob.txt
echo quit>>e:\bak\temp\newjob.txt
[
Last edited by exzzz on 2010-4-12 at 11:29 ]
作者: geminidos
时间: 2010-4-14 12:53
谢谢几位了,我搜了半天,也没找到遍历文件夹的代码,结构太复杂了,最后还是用flashfxp传了