由bat批处理做成的ftp自动下载,怎么才能不自动覆盖??

小弟菜鸟。做了个自动从ftp服务器上下载文件到指定目录上的批处理文件,但是有时候本地文件已有并且很大就不用下载了。请问怎么才能如果本地已有就不用下载了??cd指定路径@e... 小弟菜鸟。做了个自动从ftp服务器上下载文件到指定目录上的批处理文件,但是有时候本地文件已有并且很大就不用下载了。请问怎么才能如果本地已有就不用下载了??
cd 指定路径

@echo off

echo open ftp服务器地址 >>ftp.src

echo 用户名>>ftp.src

echo 密码 >>ftp.src

echo bin >>ftp.src

echo mget *.vdb >>ftp.src

echo y >>ftp.src

echo bye>>ftp.src

ftp -s:ftp.src

del ftp.src
展开
 我来答
ryk40sro
2011-03-28 · TA获得超过1610个赞
知道小有建树答主
回答量:693
采纳率:0%
帮助的人:349万
展开全部
。用其它软件建的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,通过。
这样可以保存文件夹结构。不足是太复杂,不能下载隐藏文件。不知道有没有简单的方法及下载隐藏文件的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
镭速传输
2024-10-28 广告
在深圳市云语科技有限公司,我们深知远程传输大文件的重要性与便捷性。为此,我们推荐使用高效的文件传输服务,这些服务通常支持断点续传,确保大文件传输的稳定与安全。用户只需简单上传,系统即可自动处理,无论文件大小,都能实现快速、可靠的远程传输。同... 点击进入详情页
本回答由镭速传输提供
匿名用户
2011-03-29
展开全部
>才是重新写入符号,这个>>是追加
所以你应该吧第一个>>改为>就ok啦。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式