使用FTP下载目录,即FTP命令批量自动下载的bat文件_DOS/BAT教程-查字典教程网
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件
发布时间:2016-12-28 来源:查字典编辑
摘要:FTP不支持目录的下载,不过FTP命令提供了mget命令,允许多文件下载,但每下载一个文件都需要确认,不能自动完成。本文主要介绍使用批处理,...

FTP不支持目录的下载,不过FTP命令提供了mget命令,允许多文件下载,但每下载一个文件都需要确认,不能自动完成。本文主要介绍使用批处理,结合FTP的相关命令来实现批量文件的下载,以便达到目录下载的目的。

大致想法如下:

ftp-s:filenamehosts>result.txt执行脚本,并将结果定向输出到result.txt

脚本内容,如

cdmydir

ls

bye

可以将mydir命令列出

然后使用批处理分析result.txt

从150OpeningASCIImodedataconnectionforfilelist.的下一行开始算,直到226Transfercomplete都是要下载的内容

然后用批处理加ftp脚本,使用get命令逐个下载

但实际过程中发现,在FTP脚本中使用get有问题,提示参数错误,无法使用。

查看了ftp的帮助ftp -?

G:>ftp-?

TransfersfilestoandfromacomputerrunninganFTPserverservice

(sometimescalledadaemon).Ftpcanbeusedinteractively.

FTP[-v][-d][-i][-n][-g][-s:filename][-a][-w:windowsize][-A][host]

-vSuppressesdisplayofremoteserverresponses.

-nSuppressesauto-loginuponinitialconnection.

-iTurnsoffinteractivepromptingduringmultiplefile

transfers.

-dEnablesdebugging.

-gDisablesfilenameglobbing(seeGLOBcommand).

-s:filenameSpecifiesatextfilecontainingFTPcommands;the

commandswillautomaticallyrunafterFTPstarts.

-aUseanylocalinterfacewhenbindingdataconnection.

-Aloginasanonymous.

-w:buffersizeOverridesthedefaulttransferbuffersizeof4096.

hostSpecifiesthehostnameorIPaddressoftheremote

hosttoconnectto.

Notes:

-mgetandmputcommandstakey/n/qforyes/no/quit.

-UseControl-Ctoabortcommands.

发现 -i 参数可以去除mget的提示,经过测试,实现了如下脚本(使用了匿名登入,如果非匿名,可以修改登入脚本):

echocdautoruns>ftp.txt

echomget*>>ftp.txt

echobye>>ftp.txt

ftp-i-A-s:ftp.txt10.1.103.10

不过,这只是下载了目录中的文件,如果有子目录,那还需要用dir命令输出,并转向输出到文本,用find来提取目录,如:

echocdautoruns>ftp.txt

echodir>>ftp.txt

echobye>>ftp.txt

ftp-A-s:ftp.txt10.1.103.10|find"<DIR>">result.txt

for/f"tokens=2,3*"%%iin(result.txt)doecho%%k

如有子文件夹,那就要深入编写了。

经过编写测试,实现如下脚本,运行环境WINXP SP2,运行通过,未载其它系统上测试过:

1、主要脚本ftpget.bat,更改前4个变量的相关信息,该脚本调用makeTree.bat,请参见2

remFTP服务器地址

sethost=10.1.103.10

remFTP登入名,如果匿名不用改

setuser=anonymous

remFTP登入密码,如果匿名不用改

setpass=123456

rem需要下载的FTP目录,如果下载子目录以分格

setdirname=目录1子目录

sethomedir=%cd%

rem生成FTP目录结构

deltree.txt

start/wcmd/cmakeTree%dirname%0

delresult*.txt

for/f"delims=/"%%iin(tree.txt)do(

rem获取dirname的所有文件

rem=============================

cd%homedir%

md%%i

cd/d%%i

echo%user%>ftp.txt

echo%pass%>>ftp.txt

echocd%%i>>ftp.txt

remmget*.*下载所有文件,但不能下载无扩展名的文件;

rem如果使用mget*可以下载所有文件,但会把子目录的文件也下载过来

echomget*.*>>ftp.txt

echobye>>ftp.txt

ftp-i-A-s:ftp.txt%host%

delftp.txt

rem==============================

)

cd%homedir%

deltree.txt

2、maketree.bat,生成FTP目录树

rem生成FTP目录结构

rem调用方法maketreedir1dir2n(n>=1)

rem%1==dir1dir2

rem%2==n

set/atreetime=%2+1

echo%1>>tree.txt

echo%user%>ftp%treetime%.txt

echo%pass%>>ftp%treetime%.txt

echocd%1>>ftp%treetime%.txt

echodir>>ftp%treetime%.txt

echobye>>ftp%treetime%.txt

ftp-A-s:ftp%treetime%.txt%host%|find"<DIR>">result%treetime%.txt

for/f"tokens=2,3*"%%iin(result%treetime%.txt)do(start/wcmd/cMaketree.bat%1%%k%treetime%)

delresult%treetime%.txt

delftp%treetime%.txt

虽然已经实现,但仍然有小问题,就是mget *.* 不能下载无扩展名的程序;如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来。get在FTP脚本中出错也不知为何。

相关信息参考:使用FTP 批处理脚本,Ftp 子命令

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新DOS/BAT学习
    热门DOS/BAT学习
    脚本专栏子分类