中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求助ftp文件遍历问题 上一主题 | 下一主题
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『楼 主』:  求助ftp文件遍历问题

小弟在win2k下的一个批处理FTP_DIR.bat,内容为
rem ****************son.bat*********************
echo set /a dir_level=dir_level+1>son.bat
echo set /a pth_level=pth_level+1>>son.bat
echo set pth%%pth_level%%=%%pth%%
echo echo open %%1 ^>script.txt>>son.bat
echo echo %%2 ^>^>script.txt>>son.bat
echo echo %%3 ^>^>script.txt>>son.bat
echo echo cd %%pth%% ^>^>script.txt>>son.bat
echo echo dir *.* filelist.txt ^>^>script.txt>>son.bat
echo echo bye ^>^>script.txt>>son.bat
echo ftp -s:script.txt>>son.bat
echo del temp.txt>>son.bat
echo echo %%pth%% ^>^>pth.txt>>son.bat
echo for /f "eol=d tokens=8* delims= " %%%%i in (filelist.txt) do echo %%pth%%/%%%%j ^>^>final.txt>>son.bat
echo for /f "eol=- tokens=8* delims= " %%%%i in (filelist.txt) do echo %%%%j ^>^>temp.txt>>son.bat
echo for /f %%%%i in (temp.txt) do set a=%%%%i>>son.bat
echo if "%%a%%"==".." goto :end>>son.bat
echo for /f "eol=. tokens=1,2 delims= " %%%%i in (temp.txt) do if "%%%%j"=="" echo %%%%i ^>^>%%dir_level%%.txt>>son.bat
echo for /f %%%%i in (%%dir_level%%.txt) do (>>son.bat
echo        set pth=%%pth%%/%%%%i>>son.bat
echo        call son.bat %%1 %%2 %%3>>son.bat
echo        set pth=%%pth(%%pth_level%%)%%>>son.bat
echo        )>>son.bat
echo :end>>son.bat
echo del %%dir_level%%.txt>>son.bat
echo set /a dir_level=dir_level-1>>son.bat
echo set /a pth_level=pth_level-1>>son.bat
rem ****************************完****************************
echo open %1>script.txt
echo %2>>script.txt
echo %3>>script.txt
echo dir *.* filelist.txt>>script.txt
echo bye>>script.txt
ftp -s:script.txt
set pth=
set pth_level=0
set dir_level=0
if exist final.txt del final.txt
if exist %dir_level%.txt del %dir_level%.txt
if exist temp.txt del temp.txt
del pth.txt
for /f "eol=d tokens=9 delims= " %%i in (filelist.txt) do echo %%i >>final.txt
for /f "eol=- tokens=9 delims= " %%i in (filelist.txt) do echo %%i >>temp.txt
for /f "eol=." %%i in (temp.txt) do echo %%i >>%dir_level%.txt
for /f %%i in (%dir_level%.txt) do (
     set pth=%%i
     call son.bat %1 %2 %3
     )

son.bat的内容
set /a dir_level=dir_level+1
set /a pth_level=pth_level+1
echo open %1 >script.txt
echo %2 >>script.txt
echo %3 >>script.txt
echo cd %pth% >>script.txt
echo dir *.* filelist.txt >>script.txt
echo bye >>script.txt
ftp -s:script.txt
del temp.txt
echo %pth% >>pth.txt
for /f "eol=d tokens=8* delims= " %%i in (filelist.txt) do echo %pth%/%%j >>final.txt
for /f "eol=- tokens=8* delims= " %%i in (filelist.txt) do echo %%j >>temp.txt
for /f %%i in (temp.txt) do set a=%%i
if "%a%"==".." goto :end
for /f "eol=. tokens=1,2 delims= " %%i in (temp.txt) do if "%%j"=="" echo %%i >>%dir_level%.txt
for /f %%i in (%dir_level%.txt) do (
       set pth=%pth%/%%i
       call son.bat %1 %2 %3
       set pth=%pth(%pth_level%)%
       )
:end
del %dir_level%.txt
set /a dir_level=dir_level-1
set /a pth_level=pth_level-1

final.txt是ftp服务器上文件名的存放文件
现在存在几个问题:
1,如果ftp服务器上有个文件夹的名字中有空格时,即ftp>cd my music不能进入my music录       所以用son.bat中的
for /f "eol=. tokens=1,2 delims= " %%i in (temp.txt) do if "%%j"=="" echo %%i >>%dir_level%.txt      过滤。
2,可以遍历部分ftp文件,中间会自动退出
不知道哪里错了,请各位大侠指教
不知道这样说有没有说明白



2005-6-12 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Michael
钻石会员





积分 10046
发帖 3039
注册 2002-11-11
状态 离线
『第 2 楼』:  

没仔细看,dos 下可以 cd "my music"。



简单就是美
2005-6-17 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 3 楼』:  

嗯,对于带有空格的目录名,可以在CD命令后用双引号包住。



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-6-18 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 4 楼』:  

谢了各位先回去再see see

2005-6-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re smileseeker:  关键在于 filelist.txt 的格式,虽然可以从你的 for 语句中窥见端倪,但是最好还是贴出样本为好。另外,不知 ftp 的 dir 是否支持类似 dir /b 的“裸格式”。至于文本的空格问题,倒是可以用 for 为指定的串前后加上引号,但是也不能一概而论,只有见到 filelist.txt 才好做判断。  另外,你使用动态创建 son.bat 来遍历子目录未免让人烟花缭乱,可以考虑以子模块的形式嵌入到程序中,这样可以避免 % ^ 之类的纷扰。-------------------- sample.bat --------------------
:main           :: 主程序开始
if "%1"==":" goto %2
:: 主程序语句
call %0 : submodule %1 %2 %3
:: 主程序语句
goto end:submodule      :: 子模块开始
:: 子模块中语句
goto end        :: 子模块结束:: 主程序语句
:end            :: 主程序结束
-------------------- sample.bat --------------------




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-6-28 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 6 楼』:  

头晕头晕还是修炼一段时间再来整这个程序吧多谢各位了

2005-7-8 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chineseblog
新手上路





积分 8
发帖 4
注册 2006-9-4
状态 离线
『第 7 楼』:  

能不能做到对ftp文件的搜索呢

2006-9-5 22:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: