高分求助——用批处理实现从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
不能下载,还需要改其他地方吗?请高手指教

...全文
2309 16 打赏 收藏 转发到动态 举报
写回复
用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]
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于 CNN + LSTM 的网络流量检测python源码+项目说明(高分课设).zip 基于 CNN + LSTM 的网络流量检测 使用 kddcup.data_10_percent 数据集训练 CNN+LSTM 模型,在测试中 10 个周期达到 95%+的准确率。 使用 PyTorch 框架进行开发。 —————————————————————————————————————————————————— 先运行 data_preprocess.py 确保 ./data/ 路径下生成 train_dataset.csv 和 test_dataset.csv 文件,后运行 main.py —————————————————————————————————————————————————— data_preprocess.py:对数据集进行预处理,包括添加列标签、对数据集特征进行归类、数据可视化、去除线性相关特征、划分训练集测试集等。 data_load.py:继承 Dataset 类,重写接口加载数据进入神经网络模型。 train_and_test.py:模型训练及测试函数。 model.py:模型结构。 main.py:定义超参数,模型训练和测试。

6,185

社区成员

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

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