batftp下载
‘壹’ 批处理来完成ftp文件自动下载
前几天笔者遇到一个需求,在windows平台下使用ftp来远程获取交换机扮毕漏的配置文件。鉴于每一次都需要在命令行里面手动输入,过程繁琐,于是想着使用脚本来完成这个重复性的工作,实现自动化。python的ftplib库也可以解决这个问题,但是笔者未来和其他bat脚本揉在一起,直接windows平台下使用批处理bat来完成。
ftp -s可以指定包含ftp命令的文本文件,ftp启动后这些命令将自动运行。
主批处理文件:ftp_main.bat
ftp命令批处理文件:ftp_task.bat,文件放置于D盘下。
除了FTP之外,date修数敏改电脑日期,time修改电脑厅烂时间,echo ^G测试电脑声音。注意,“^G”是在命令行中使用ctrl + g输入的,可以使用echo ^G > test.txt来获取这个字符。
最后这个脚本东凑西凑,界面如下:
‘贰’ bat批量下载FTP
首先需要先登录Ftp,然后获取该www文件夹下面的文件列表,再逐一下载即可了。
下载一款ftp工具,比如WinScp,方便快捷呢。
‘叁’ 如何使用bat命令直接下载指定ftp上面的指定文件
ftp下载文件一般步骤如下:
echo open xxx.xxx.xxx.xxx >ftp.txt
echo user >>ftp.txt
echo password >>ftp.txt
echo binary >>ftp.txt [可选]
echo get srv.exe >>ftp.txt
echo bye >>ftp.txt
ftp -s:ftp.txt(这一步是关键哟)
del ftp.txt
存为*.bat
‘肆’ 批处理bat从FTP下载文件
你的命令本身体就存在问题
1.在cmd中输入ftp打开ftp.exe进入ftp
ftp>open ftp--ip
ftp>uesr
ftp>pass
ftp>dir (显示所有文件/目录)
ftp>mget cf*.* D:\test (多文件下载要用mget,居然没人发现。。。)
ftp>y (确认下载)
ftp>bye (退出ftp)
exit
2.登陆ftp可直接在cmd中输入ftp ftp--ip
3.open 是ftp的命令啊 批处理只是调用ftp.exe 可不是说ftp是cmd中的。。。
4.求分啊。。。
‘伍’ 由bat批处理做成的ftp自动下载,怎么才能不自动覆盖
。用其它软件建的FTP服务器我没用过,不清楚dir命令返回结果的的格式。有问题可以Hi。
大体的工作流程是这样。首先远程文件夹列表是空的,写入一行“/”(远程根文件夹)。然后开始循环。第n次循环,获取运程文件夹列表第n行文件夹内的子文件夹和文件的列表,处理获取的这个列表,把列表里的子文件夹加入远程文件夹列表,把列表里的文件下载下来。一直循环,直到最后远程文件夹列表第n行为空。
如果不需要保存文件夹结构,可以用 lanny119 的方法,用mget命令下载全部文件。
rem setlocal批处理中所作的环境更改只影响本批处理。前面加@的作用,不显示此行命令本身
@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
rem 显示命令本身 关
@echo off
rem 填ftp服务器地址或域名
set ftpsvr=
rem 填用户名
set user=
rem 填密码
set pass=
rem 填保存备份的文件夹
set archdir=D:\backup
rem 填WinRAR安装文件夹,如:C:\Program Files\WinRAR
set rardir=
rem 把要使用的临时文件夹的路径设为环境变量mytemp
set mytemp=%temp%\ftp.x
rem 防止可能的同名文件夹或文件存在影响工作,全删一遍。>nul不显示回显 2>nul不显示错误信息
rd /s /q "%mytemp%">nul 2>nul
del /a /f "%mytemp%">nul 2>nul
md "%mytemp%"
rem 把一个斜杠写到%mytemp%\rdl里面。斜杠表示远程的根文件夹。rdl用作保存远程文件夹列表。
echo />"%mytemp%\rdl"
rem 已下载文件的远程文件夹计数
set dcount=0
rem 标号 cycle
:cycle
rem 获取远程文件夹内的文件和子文件夹列表。
rem 因为下面那个for要被执行多次,非第一次执行要跳过已处理的行,所以要写skip=n。
rem 但是,第一次执行时,写个skip=0出错。所以第一次执行时不写ship= 。
if %dcount%==0 set oo=
if not %dcount%==0 set oo=^ skip=%dcount%
rem 跳过指定的行数,每次从rdl文件中取一行赋给%%I。
for /f "tokens=*%oo%" %%I in (%mytemp%\rdl) do (
rem 为ftp准备命令文件(获取文件列表用)。第一行用的>替换ftpcmd文件的内容,>>追加。
echo open %ftpsvr%>"%mytemp%\ftpcmd"
echo %user%>>"%mytemp%\ftpcmd"
echo %pass%>>"%mytemp%\ftpcmd"
rem 写入的内容为更改远程工作目录为for语句取到的目录。
echo cd "%%I">>"%mytemp%\ftpcmd"
rem 写入的内容为获取远程工作目录里的文件和子文件夹列表,保存到dir文件。
echo dir -a "%mytemp%\dir">>"%mytemp%\ftpcmd"
echo bye>>"%mytemp%\ftpcmd"
rem 以指定命令文件的方式执行ftp语句。回显内容太多,不显示。
ftp -s:"%mytemp%\ftpcmd">nul
rem 下面是处理获取的dir文件及准备命令文件(下载文件用)。
echo open %ftpsvr%>"%mytemp%\ftpcmd"
echo %user%>>"%mytemp%\ftpcmd"
echo %pass%>>"%mytemp%\ftpcmd"
echo cd "%%I">>"%mytemp%\ftpcmd"
set ff=
rem 每次从dir文件中取一行的第三段和第三段后面所有的(tokens=3*)。
for /f "tokens=3*" %%K in (%mytemp%\dir) do (
rem 如果第三段等于<DIR>,是文件夹,加入rdl。<和>不加^为输入输出重定向符号。
rem %%L为第四段,如果还有更多部分,MN…类推。
if %%K==^<DIR^> echo %%I%%L/>>"%mytemp%\rdl"
rem 是文件,加入命令文件准备下载。
if not %%K==^<DIR^> (
echo recv "%%L">>"%mytemp%\ftpcmd"
rem 显示要下载的文件。
echo 下载 %%I%%L ···
set ff=1
)
)
rem 用环境变量的字符串替换功能把斜杠替换成Win的反斜杠。
set ss=%%I
set ss=!ss:/=\!
rem 在临时文件夹里建立对应文件夹。
md "%mytemp%\root!ss!"
rem !为环境变量延迟扩充符号,不在语句块被执行时扩充,而是延迟到本条语句被执行时扩充。
rem 有文件要下载才执行里面的。
if !ff!==1 (
echo bye>>"%mytemp%\ftpcmd"
rem 更改本地目录到对应文件夹。
cd /d "%mytemp%\root!ss!"
ftp -s:"%mytemp%\ftpcmd">nul
)
rem 处理完一个文件夹,计数加一。
set /a dcount=!dcount!+1
)
rem 前面for语句读入rdl并处理,在处理中rdl又可能有行被加入。
rem 如果计数没变化,说明rdl中没有要处理的行了,转到标号compress。
if "%dcount%"=="%lstdcount%" goto :compress
rem 没转走就记录计数,转到标号cycle。
set lstdcount=%dcount%
goto :cycle
:compress
echo 压缩已下载的文件···
rem 子命令a,添加文件到压缩文件。开关-ep1,压缩文件中文件不带源文件基本路径。
rem 开关-o+,覆盖开。开关-r,包含子文件夹。开关-agYYYYMMDD,日期作为存档文件名。
"%rardir%\rar.exe" a -ep1 -o+ -r -agYYYYMMDD "%archdir%\" "%mytemp%\root\*">nul
cd "%temp%"
rem 删除临时文件夹。
rd /s /q "%mytemp%"
本地WinXP简体中文,远程IIS,通过。
这样可以保存文件夹结构。不足是太复杂,不能下载隐藏文件。不知道有没有简单的方法及下载隐藏文件的方法。
‘陆’ 自己做BAT脚本 通过FTP服务器自动下载或上传到本机电脑 公司里面用的研究了很久
1. ftp.tmp 是用命令产生的一个ftp命令文本,这个文本在运行ftp命令之后会自动运行。
ftp.tmp 的内容是
open 192.168.10.10
bak
bak
mget * (这句就是下载所有文件)
bye
2. 要达到你上传d:/1.txt,把批处理内容改为
@echo off
@echo xp的任务开始le...................
echo open 192.168.10.10>>ftp.tmp
echo bak>>ftp.tmp
echo bak>>ftp.tmp
echo put d:/1.txt>>ftp.tmp
echo bye>>ftp.tmp
ftp -i -s:ftp.tmp
del ftp.tmp
@echo 搞定收工。
@echo on
还有问题Q 7841983
‘柒’ 用bat文件自动下载ftp的文件到本地
用FTP的话,个人觉得太麻烦了,经观察你的目的就是把一台机器(可认为是服务器)内的一些东西,比如图片、文件等拷贝传输至另一台机器(可认为是客户区),况且还是在同一个局域网内(当然也包括跨网段的大私有局域网),只要能通的都可以。用类似FTP的方式,不太灵活,包括权限以及实际当中的易用性、扩展性。为解决上述问题,我个人建议用共享的方式解决,看看是不是符合你的实际需求,也仅供参考。
一、在你那台装有图片、资料、文件的机器上(以下简称服务器),设置共享。
此处按你的f:DCIMCamera文件夹设置共享,如图所示
以上显示结果完全正确,完全符合你的预定要求。
‘捌’ 编写一个VBS或者BAT的从FTP自动下载并运行的脚本
@echo open 192.168.1.4>x @echo 用户名>>x @echo 密码>>x @echo get one.jpg d:\abc.jpg>>x @echo bye>>X @ftp -s:x @del x /q @start d:\abc.jpg 保存以上代码为bat文件,并修改相关数据. "192.168.1.4" 改成你的服务器地址并替换上你的用户名和密码 "get one.jpg d:\abc.jpg" 这一句是下载服务器根目录下的one.jpg 到 d盘并重命名为abc.jpg 最后一句就是打开运行 d盘下的abc.jpg 如果不懂咱再说.
‘玖’ bat文件FTP下载太慢导致下面一条程式提前运行
本代码以下载FTP服务器上某个目录下的所有文件为例。
如果需要下载某个目录下的.txt类型的所有文件,请把
mget *.*
改成
mget *.txt
如果需要下载某个目录下的某一个文件a.txt,请把
mget *.*
改成
get a.txt
@echo off rem 指定FTP用户名 set ftpUser=FTPUSERNAME rem 指定FTP密码 set ftpPass=FTPPASSWORD rem 指定FTP服务器地址 set ftpIP=192.168.0.2 rem 指定待下载的文件位于FTP服务器的哪个目录 set ftpFolder=/SharedFile/Log rem 指定从FTP下载下来的文件存放到本机哪个目录 set LocalFolder=C:/temp set ftpFile=%temp%/TempFTP.txt >"%ftpFile%" ( echo,%ftpUser% echo,%ftpPass% echo cd "%ftpFolder%" echo lcd "%LocalFolder%" echo bin echo mget *.* echo bye ) start ftp -v -i -s:"%ftpFile%" %ftpIP%