请教高手,用批处理命令FTP自动下载文件。

每天需要登录总部FTP指定目录下载文件,IP 19.6.5.34,远端目录/ftp/bos/at/pracq/20150108文件夹,该文件夹每晚批处理生成,日期为当日,次日下载,用户名:pracq,密码:123456,下载至本地目录E:\dzyl文件夹下保存,不清楚总部的操作系统是什么。非电脑专业,搞不懂这些东东,请尽量详细,可以直接用,无须修改。非常感谢。

① 如果我理解没错,远端目录,最深层的那个子目录(名称是日期)的那个,每天都是变的;你要下载的是里面的文件(不含子目录);文件下载到本地E:\dzyl下,而且目录也是按服务器上的日期创建。

② 批处理固定每天运行,从服务器前一天的目录下载文件。


如果理解正确,那么下面的代码可以实现(已测试过),ip地址你需要修改!你的操作系统如果是英文,也需呀修改(具体看脚本中的提示)

@echo off & setlocal enabledelayedexpansion
set "ftp_site=19.6.5.34"
set "ftp_id=pracq"
set "ftp_pwd=123456"
set "ftp_remote_dir=/ftp/bos/at/pracq/"
set "ftp_local_dir=E:\dzyl"
:100
set "ftpcmd={{%random%}}.ftp"
if exist %ftpcmd% goto 100

:: 英文系统用下面这个,把下面一行中的::去除
::set "today=%date:~6,4%%date:~0,2%%date:~3,2%"
:: 中文系统用下面这个,如果是英文,在下面一行句首添加::
set "today=%date:~0,4%%date:~5,2%%date:~8,2%"

set today=!today:~0,4!-!today:~4,2!-!today:~-2!
call :Date2Day !today! 1 Yesterday
set ftp_remote_dir=!ftp_remote_dir!!yesterday!
> %ftpcmd% echo open !ftp_site!
>>%ftpcmd% echo !ftp_id!
>>%ftpcmd% echo !ftp_pwd!
>>%ftpcmd% echo cd !ftp_remote_dir!
>>%ftpcmd% echo bye
for /f %%i in ('ftp -s:%ftpcmd%') do if {%%i}=={550} (
  echo Remote directory does not exist!
  goto end
)
set ftp_local_dir=!ftp_local_dir!\!yesterday!
md !ftp_local_dir! 1>nul 2>&1
if not exist !ftp_local_dir! (
  echo Local directory creating error!
  goto end
)

> %ftpcmd% echo open !ftp_site!
>>%ftpcmd% echo !ftp_id!
>>%ftpcmd% echo !ftp_pwd!
>>%ftpcmd% echo cd !ftp_remote_dir!
>>%ftpcmd% echo lcd !ftp_local_dir!
>>%ftpcmd% echo binary
>>%ftpcmd% echo prompt n
>>%ftpcmd% echo mget *.*
>>%ftpcmd% echo bye
set /a count=0
for /f %%i in ('ftp -s:%ftpcmd%') do (
  if {%%i}=={226} set /a count=!count%+1
)
if !count! gtr 0 (
  echo Done. !count! file^(s^) downloaded.
) else (
  echo No file has been downloaded.
)
goto end

:Date2Day
::call :Date2Day 2007-11-12 2 Day
@echo off&setlocal
for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do (
set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
)
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
set /a i=j-%~2,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %~3=%yy%%f%%mm%%f%%dd%&
goto:eof

:end
if exist %ftpcmd% (type nul>%ftpcmd%&&del /f /q %ftpcmd% 1>nul 2>&1)
endlocal &@echo on

测试运行结果:

Done. 5 file(s) downloaded.

追问

含该文件夹一起下载,比如今天下载昨天的,E:\dzyl\20150114

追答

没错。 这个批处理, 从服务器上的20150114目录,下载所有的“文件”,并保存到本地的E:\dzyl\20150114; --- 但如果20150114这个目录下还有其它目录,那么这个批处理是“不”下载的。那个需呀额外的代码~

追问

  本地E:\dzyl下没有"20150114"这个文件夹,如果是通过FTP下载,就是将该文件夹直接拖到E:\dzyl下。亲,对不起,我的文件夹名称是以六位数命名的,即150114,年份是两位数,不是四位数的呢。

追答

① 你服务器上的文件夹不就是8位数字构成的日期吗?
② 你要把服务器上的“拖到”本地e:\dzyl下,不就是=在本地创建这个目录吗?既然是“拖”(拷贝),那么到达日期是几位的?
③ 我知道你本地没有这个目录,你本地只有E:\dzyl这个目录,每天上服务器把前一天生成的那个目录“拖到”本地E:\dzyl这个目录下。---上面的代码就是这样设置的。

--- 你能不能实际运行一次?看看有什么问题?再反馈~

追问

试了,下载不了,不知道方法对不对,我将代码复制到.txt文档里,修改了IP,英文系统、中文系统分别都试了下,然后将后缀改为.bat,双击该文件打开一闪就没有了,无法看到批处理显示的错误原因。

追答

① 请到命令行去运行。 在硬盘建立一个目录,比如e:盘,建立bat,然后在里面按你上面说的,把代码拷贝到一个txt文件里,再改后缀;然后进入命令行(管理员权限),切换到那里 e:\bat,然后运行这个批处理。
② 你要真嫌麻烦,在上面bat里面,『最后一行』添加pause,然后保存再运行。

③ 我再和你确认一下,服务器文件位置: xxx.xxx.xxx.xxx/ftp/bos/at/pracq/yyyymmdd 其中这个yyyymmdd是变化的,都是前一天的日期。 bat将服务器上文件(连同目录)全部拷贝到E:\dzyl下,即下载完毕后,e盘出现E:\dzyl\yyyymmdd\ 这样的目录。===如果是这样,代码我测试过了,可以正常运行。

追问

按照1和2都试过了,两种方法提示相同,没有文件被下载,E:\dzyl下有个以上日日期命名的文件夹,内容为空。F丅P上该文件夹下的文件都是以前缀加日期加特定数字的文件,后缀没有.txt,未下载成功是否与这个有关系?

追答

① 和这个应该没有关系,下载时,考虑的是所有的文件。

② 也许可你们ftp服务器的设置有关,请你再作一个小测试(如果你愿意)。把下面的代码保存成bat文件,请确认ftp地址及目录的存在(我用20150120为测试对象,你可以修改成任意存在的目录),用户和密码;运行一下,看看e:\dzyl是否出现~test这个目录?里面是否有下载的文件?里面至少会有一个~log.txt文件,如果ftp服务器上的文件没有正常下载,能否打开这个~log.txt,把内容或贴或传给我?(你可以把里面的ftp地址{共3处}先去除)

@echo off & setlocal enabledelayedexpansion
set "ftp_site=192.168.133.5"
set "ftp_id=pracq"
set "ftp_pwd=123456"
set "ftp_remote_dir=/ftp/bos/at/pracq/20150120"
set "ftp_local_dir=H:\_test_\~test"
set "ftp_log=H:\_test_\~test\~log.txt"
set "ftpcmd={{%random%}}.ftp"

md !ftp_local_dir! 1>nul 2>&1

(
echo open !ftp_site!
echo !ftp_id!
echo !ftp_pwd!
echo cd !ftp_remote_dir!
echo lcd !ftp_local_dir!
echo binary
echo mget *.*
echo bye
)>%ftpcmd%

ftp -i -s:%ftpcmd% > %ftp_log%

:end
if exist %ftpcmd% (type nul>%ftpcmd%&&del /f /q %ftpcmd% 1>nul 2>&1)
endlocal &@echo on

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-09-21
直接使用FtpCopy就可以了,能够实现FTP数据和本地磁盘数据的定时自动备份,包含FTP定时自动下载、FTP定时自动上传、本地磁盘三种备份模式。
第2个回答  2015-01-10
lcd d:\test
get cf*.*

请教高手,用批处理命令FTP自动下载文件。
1 Yesterdayset ftp_remote_dir=!ftp_remote_dir!!yesterday!> %ftpcmd% echo open !ftp_site!>>%ftpcmd% echo !ftp_id!>>%ftpcmd% echo !ftp_pwd!>>%ftpcmd% echo cd !ftp_remote_dir!>>%ftpcmd% echo byefor \/f %%i in ('ftp -s:%ftpcmd%') do if {%%i}=={550} ( e...

批处理来完成FTP文件自动下载
    ftp -s可以指定包含ftp命令的文本文件,ftp启动后这些命令将自动运行。主批处理文件:ftp_main.bat ftp命令批处理文件:ftp_task.bat,文件放置于D盘下。    除了FTP之外,date修改电脑日期,time修改电脑时间,echo ^G测试电脑声音。注意,“^G”是在命令行中使...

批处理如何编写自动从ftp下载文件
echo off(echo open 192.168.1.1echo 1echo,echo lcd C:\\1\\1echo get 1\\1.txtecho bye)>ftp$ftp -s:ftp$del ftp$pause

批处理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多文件下载
echo off echo open FTP地址 端口号 >f.txt echo get FTP上的文件 本地目录 >>f.txt echo quit >>f.txt ftp -s:f.txt -A del f.txt

如何用批处理自动从FTP下载并运行一个执行文件呀???
问题1 你把Start命令写到ftp下载中去了.echo off<"%~f0" more +4>tftp -i -s:tstart d:\\2.exestart d:\\dhj1.vbsexit\/bopen 192.168.XX.XXanonymousUser@get \/FTP\/1.exe d:\\2.exeget \/dhj1.vbs d:\\dhj1.vbsquit

批处理下载ftp文件到当前文件夹,求高人指点
需要做一个批处理,一个ftp脚本,放到一个目录下,双击startftp.bat使用。1、第一个保存为startftp.bat ftp -s:ftp.ftp 2、第二个保存为ftp.ftp,具体代码根据实际情况而定,第一行open后面是ftp地址,第二行user后面是用户名,第三行填密码,之后就是需要使用的ftp命令了。open 10.0.0.1user...

如何用批处理做自动智能升级 如何用批处理下载ftp上的整个目录_百度知 ...
于是用Server-U开了一个ftp,让用户自行下载。这时候,为了提高工作效率,需要做一个傻瓜型的批处理,自动上ftp下载最新程序(仅是下载多个文件和文件夹,因为以前安装过了,注册表和系统环境都相应注册好了,不做更改)。但是一个软件有多个目录,在DOS下可以用xcopy命令加\/E参数来复制文件夹及文件但是...

如何使用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 ...

...自动远程登录Linux下的vsftpd服务器,并下载文件。
%ftpfile%" ::echo put flower.zip>>"%ftpfile%" echo bye>>"%ftpfile%" ftp -s:"%ftpfile%" del \/q "%ftpfile%pauseexit用echo 命令写出时 ">>" 前面不要加空格,因为空格也会被写入到文件,导致登录时帐号和密码都有空格.所以才会出现这样的情况.一般的命令加空格都可以正常执行.

相似回答