中国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
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: