![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 20:27 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求助ftp文件遍历问题 |
| 可打印版本 1,348 / 6 |
| 第1楼 smileseeker | 发表于 2005-06-12 00:00 |
| 中级用户 发帖 83 积分 316 | |
|
求助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文件,中间会自动退出 不知道哪里错了,请各位大侠指教 不知道这样说有没有说明白 |
|
| 第2楼 Michael | 发表于 2005-06-17 00:00 |
| 钻石会员 发帖 3,041 积分 10,056 | |
|
没仔细看,dos 下可以 cd "my music"。
|
|
| 第3楼 JonePeng | 发表于 2005-06-18 00:00 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
嗯,对于带有空格的目录名,可以在CD命令后用双引号包住。
|
|
| 第4楼 smileseeker | 发表于 2005-06-19 00:00 |
| 中级用户 发帖 83 积分 316 | |
|
谢了各位先回去再see see
|
|
| 第5楼 willsort | 发表于 2005-06-28 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
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 -------------------- |
|
| 第6楼 smileseeker | 发表于 2005-07-08 00:00 |
| 中级用户 发帖 83 积分 316 | |
|
头晕头晕还是修炼一段时间再来整这个程序吧多谢各位了
|
|
| 第7楼 chineseblog | 发表于 2006-09-05 22:13 |
| 新手上路 发帖 4 积分 8 | |
|
能不能做到对ftp文件的搜索呢
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |