标题: 求助ftp文件遍历问题
[打印本页]
作者: smileseeker
时间: 2005-6-12 00:00
标题: 求助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文件,中间会自动退出
不知道哪里错了,请各位大侠指教
不知道这样说有没有说明白
作者: Michael
时间: 2005-6-17 00:00
没仔细看,dos 下可以 cd "my music"。
作者: JonePeng
时间: 2005-6-18 00:00
嗯,对于带有空格的目录名,可以在CD命令后用双引号包住。
作者: smileseeker
时间: 2005-6-19 00:00
谢了各位先回去再see see
作者: willsort
时间: 2005-6-28 00:00
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 --------------------
作者: smileseeker
时间: 2005-7-8 00:00
头晕头晕还是修炼一段时间再来整这个程序吧多谢各位了
作者: chineseblog
时间: 2006-9-5 22:13
能不能做到对ftp文件的搜索呢