中国DOS联盟论坛

中国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