高分求助——用批处理实现从ftp服务器上下载文件

jin_ok 2009-05-16 04:22:32
我从网上找的批处理脚本,当允许匿名访问的时候下面的代码可以从ftp主目录下载文件
rem FTP服务器地址
set host=10.80.9.1

rem FTP登入名,如果匿名不用改
set user=Anonymous

rem FTP登入密码,如果匿名不用改
set pass=

rem 需要下载的FTP目录,如果下载子目录以分格
set dirname=.\

set homedir=%cd%

rem 生成FTP目录结构
del tree.txt
start /w cmd /c makeTree %dirname% 0
rem del result*.txt

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

rem 获取dirname的所有文件
rem =============================
cd %homedir%
md %%i
cd /d %%i
echo %user%>ftp.txt
echo %pass%>>ftp.txt
echo cd %%i>>ftp.txt

rem mget *.* 下载所有文件,但不能下载无扩展名的文件;
rem 如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来
echo mget *.*>>ftp.txt

echo bye>>ftp.txt
ftp -i -A -s:ftp.txt %host%
del ftp.txt
rem ==============================

)
cd %homedir%
del tree.txt
----------------------------------上面的脚本调用下面的脚本

rem 生成FTP目录结构
rem 调用方法 maketree dir1dir2 n (n>=1)
rem %1 == dir1dir2
rem %2 == n

set /a treetime=%2+1
echo %1 >>tree.txt

echo %user% >ftp%treetime%.txt
echo %pass% >>ftp%treetime%.txt
echo cd %1 >>ftp%treetime%.txt
echo dir >>ftp%treetime%.txt
echo bye >>ftp%treetime%.txt
ftp -A -s:ftp%treetime%.txt %host% |find "<DIR>">result%treetime%.txt
for /f "tokens=2,3*" %%i in (result%treetime%.txt) do (start /w cmd /c Maketree.bat %1%%k %treetime%)

del result%treetime%.txt
del ftp%treetime%.txt

现在的问题是:当服务器不允许匿名访问的时候,我修改了两行代码
set user=myuser
set pass=mypass
不能下载,还需要改其他地方吗?请高手指教

...全文
2398 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mongdecheng 2010-11-23
  • 打赏
  • 举报
回复
请教:ljc007
您好。
用你的代码,
我这能下载根目录名称,下载不了里面的子文件夹,下来的文件大小一直都是0KB,请问是什么问题?
linxue1 2009-12-25
  • 打赏
  • 举报
回复
请教:ljc007
您好。
我想问下如果本地已经有一个和ftp server完全一样的文件,这时如果用get 命令它是会覆盖掉现在的文件,还是不下载?

因为我要做一个任务计划的批处理,ftp 某个目录里的文件10分钟增加一部分,我怎样让批处理程序下载更新的文件,而不是每次连已经下载过的文件也下载。
谢谢!
jin_ok 2009-06-29
  • 打赏
  • 举报
回复
谢谢老大!
ljc007 2009-05-24
  • 打赏
  • 举报
回复
我重新写了一遍,XP下测试通过。

test.bat

[code=BatchFile]@echo off
rem FTP服务器地址
set ftpIP=10.80.9.1
rem FTP登入名
set ftpUser=myUser
rem FTP登入密码
set ftpPass=myPass
rem 需要下载的FTP目录(默认为整站下载)
set ftpFolder=.
set DownFolder=%~dp0
rem 生成FTP目录结构
>"%temp%\ftpTree.txt" type nul
start /w /min cmd /c MakeTree.bat "%ftpFolder%" 0
for /f "usebackq delims=/" %%a in ("%temp%\ftpTree.txt") do (
cd /d "%DownFolder%"
md "%%a"
cd /d "%%a"
>"%temp%\ftpFile.txt" (
echo/%ftpUser%
echo/%ftpPass%
echo/cd "%%a"
echo/mget *.*
echo/bye
)
if "%ftpUser%" equ "Anonymous" (
ftp -i -A -s:"%temp%\ftpFile.txt" %ftpIP%
) else (
ftp -i -s:"%temp%\ftpFile.txt" %ftpIP%
)
)
del /f /q /a "%temp%\ftp*.txt"[/code]

MakeTree.bat

[code=BatchFile]@echo off
rem MakeTree.bat
set /a TreeNum=%2+1
>>"%temp%\ftpTree.txt" echo/%~1
>"%temp%\ftpFile%TreeNum%.txt" (
echo/%ftpUser%
echo/%ftpPass%
echo/cd %1
echo/dir
echo/bye
)
if "%ftpUser%" equ "Anonymous" (
ftp -A -s:"%temp%\ftpFile%TreeNum%.txt" %ftpIP%|find " <DIR>">"%temp%\ftpFldLevel%TreeNum%.txt"
) else (
ftp -s:"%temp%\ftpFile%TreeNum%.txt" %ftpIP%|find " <DIR>">"%temp%\ftpFldLevel%TreeNum%.txt"
)
for /f "usebackq tokens=2,3*" %%i in ("%temp%\ftpFldLevel%TreeNum%.txt") do (
start /w /min cmd /c MakeTree.bat "%~1\%%k" %TreeNum%
)[/code]
prcgolf 2009-05-19
  • 打赏
  • 举报
回复
关注老大的解决方案
ljc007 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jin_ok 的回复:]
ljc007大哥的代码好像有问题
我执行Download.bat,DOS命令窗口出现'系统找不到指定的路径',而且一直出这样的DOS窗口
[/Quote]

把所有的@echo off删除,最后一行加个pause,看看哪里出了问题。
jin_ok 2009-05-18
  • 打赏
  • 举报
回复
我删除了@echo off,在最后一行加个pause
系统找不到指定的路径是这样的:比如我的ftp根目录里有一个目录叫123,第一次的窗口报:找不到 cd .\123123 1>>ftp1.txtecho
然后再弹出一窗口报找不到 cd .\123123123 1>>ftp2.txtecho,接着报找不到cd .\123123123123 1>>ftp3.txtecho,一直这样下去,好像在一个循环中出不来了
可乐是我 2009-05-18
  • 打赏
  • 举报
回复
ljc007绝对是高手,至少对我来说是,我所有的批处理问题在这里请教都是他给解决的,哈哈
akinicn 2009-05-18
  • 打赏
  • 举报
回复
学习 关注中
jin_ok 2009-05-17
  • 打赏
  • 举报
回复
ljc007大哥的代码好像有问题
我执行Download.bat,DOS命令窗口出现'系统找不到指定的路径',而且一直出这样的DOS窗口
ljc007 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Liv2005 的回复:]
引用 2 楼 lhfagocwz 的回复:
你是批处理高手??

不。。。他是Windows高手。。。。
[/Quote]

既不是批处理高手,也不是Windows高手。
Windows版块藏龙卧虎,我只不过是手熟、有闲,仅此而已。
ljc007 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jin_ok 的回复:]
谢谢ljc007
我把你代码中这两个变量改成我的实际变量
set ftpUser=myUser
set ftpPass=myPass
我这能下载根目录里面的文件,下载不了里面的目录,希望你能指教,TempAcc.txt这个文件的内容在哪里
[/Quote]

Download.bat

[code=BatchFile]@echo off
rem FTP服务器地址
set host=10.80.9.1
rem FTP登入名,如果匿名不用改
rem set user=Anonymous
set user=myuser
rem FTP登入密码,如果匿名不用改
rem set pass=
set pass=myPass
rem 需要下载的FTP目录,如果下载子目录以分格
set dirname=.\
set homedir=%cd%
rem 生成FTP目录结构
del tree.txt
start /w cmd /c makeTree %dirname% 0
rem del result*.txt
for /f "delims=/" %%i in (tree.txt) do (
rem 获取dirname的所有文件
rem =============================
cd %homedir%
md %%i
cd /d %%i
echo %user%>ftp.txt
echo %pass%>>ftp.txt
echo cd %%i>>ftp.txt
rem mget *.* 下载所有文件,但不能下载无扩展名的文件;
rem 如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来
echo mget *.*>>ftp.txt
echo bye>>ftp.txt
if "%user%" equ "Anonymous" (
ftp -i -A -s:ftp.txt %host%
) else (
ftp -i -s:ftp.txt %host%
)
del ftp.txt
rem ==============================
)
cd %homedir%
del tree.txt[/code]

maketree.bat

[code=BatchFile]@echo off
rem 生成FTP目录结构
rem 调用方法 maketree dir1dir2 n (n>=1)
rem %1 == dir1dir2
rem %2 == n
set /a treetime=%2+1
>>tree.txt echo/%1
>ftp%treetime%.txt echo/%user%
>>ftp%treetime%.txt echo/%pass%
>>ftp%treetime%.txtecho cd %1
>>ftp%treetime%.txt echo dir
>>ftp%treetime%.txt echo bye
if "%user%" equ "Anonymous" (
ftp -A -s:ftp%treetime%.txt %host%|find " <DIR>">result%treetime%.txt
) else (
ftp -s:ftp%treetime%.txt %host%|find " <DIR>">result%treetime%.txt
)
for /f "tokens=2,3*" %%i in (result%treetime%.txt) do (
start /w cmd /c Maketree.bat %1%%k %treetime%
)
del result%treetime%.txt
del ftp%treetime%.txt[/code]
jin_ok 2009-05-16
  • 打赏
  • 举报
回复
谢谢ljc007
我把你代码中这两个变量改成我的实际变量
set ftpUser=myUser
set ftpPass=myPass
我这能下载根目录里面的文件,下载不了里面的目录,希望你能指教,TempAcc.txt这个文件的内容在哪里



Liv2005 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lhfagocwz 的回复:]
你是批处理高手??
[/Quote]
不。。。他是Windows高手。。。。
lhfagocwz 2009-05-16
  • 打赏
  • 举报
回复
你是批处理高手??
ljc007 2009-05-16
  • 打赏
  • 举报
回复
test.bat

[code=BatchFile]@echo off
rem 指定FTP用户名
set ftpUser=USERNAME
rem 指定FTP密码
set ftpPass=PASSWORD
rem 指定FTP服务器地址
set ftpIP=10.80.9.1

set ftpFile=%temp%\TempAcc.txt
>"%ftpFile%" echo.%ftpUser%
>>"%ftpFile%" echo.%ftpPass%
>>"%ftpFile%" echo bin
>>"%ftpFile%" echo mget *.*
>>"%ftpFile%" echo bye
start ftp -v -i -s:"%ftpFile%" %ftpIP%[/code]
内容概要:本文介绍了DeepSeek在职场中的应用,从提示语技巧到多场景应用,涵盖了DeepSeek的基础模型(V3)、深度思考模型(R1)及其联网搜索功能。文中详细描述了DeepSeek的模型对比,包括操作规范、结果导向、路径灵活性、响应模式和风险特征等方面。此外,还探讨了DeepSeek在制作可视化图表、PPT、海报、视频以及批量生成新媒体文案等具体应用场景中的使用方法和技巧。最后,文章展示了DeepSeek在市场调查、AI应用开发等方面的应用实例,强调了其在人机协同和共生领域的潜力。 适用人群:适用于希望提升工作效率和创新能力的职场人士,特别是从事数据分析、内容创作、市场营销、AI开发等领域的专业人士。 使用场景及目标:①通过DeepSeek的基础模型(V3)和深度思考模型(R1)进行高效的任务处理和复杂推理;②利用DeepSeek制作可视化图表、PPT、海报和视频,提高内容创作的质量和效率;③通过DeepSeek进行市场调查和AI应用开发,优化业务流程并推动创新。 其他说明:DeepSeek不仅提供了强大的AI工具,还强调了人机协同的重要性。用户在使用过程中应注意操作规范,结合实际需求选择合适的模型,并充分利用DeepSeek的各项功能来实现高效的职场应用。文中还提到了多个国际竞赛中的获奖情况,展示了DeepSeek团队在AI领域的卓越实力。

6,211

社区成员

发帖
与我相关
我的任务
社区描述
windows网络管理与配置
社区管理员
  • 网络管理与配置社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧