日期:2014-05-17  浏览次数:20787 次

批处理问题 从ftp上下载指定文件
一个批处理问题 从ftp上拷贝文件 若服务器上有aaa_20111003.txt,aaa_20111003.ctl,bbb_20111104.txt,bbb_20111104.ctl
ccc_20111105.txt.每个ctl对应一个相同文件名的.txt文件,若服务器上没有相应的ctl文件的话,对应的txt文件则不下载,若存在ctl,则下载对应的txt文件.下载完后则删除下载的文件和对应的ctl文件
ftp下载后的期望结果是只下载aaa_20111003.txt和bbb_20111104.txt这两个文件
请问各位有什么好的方法实现吗?
 


------解决方案--------------------
写ftp脚本呗,但我没时间写出来。
大致是把文件列表取下来。
然后,分析文件列表,用批处理生成脚本去下载和删除指定的文件。
如果是我自己就用powershell写一个ftp客户端脚本去做这件事情。
C# code
#获取文件列表
$listFTP = [system.net.ftpwebrequest] [system.net.webrequest]::create("ftpurl")
$listFTP.UseBinary = $true;
$listFTP.Credentials = New-Object System.Net.NetworkCredential("username","password")
$listFTP.Method=[system.net.WebRequestMethods+ftp]::listdirectorydetails
$listFTP.Timeout=2000
$listFTP.ReadWriteTimeout=2000
$response = $listFTP.getresponse()
$stream = New-Object System.Io.StreamReader($response.getresponsestream(),[System.Text.Encoding]::UTF8)
while(-not $stream.EndOfStream){
$stream.ReadLine()
}
$stream.Close()
$response.Close()

#上传文件
$fileinf=New-Object System.Io.FileInfo("localfilename")
$upFTP = [system.net.ftpwebrequest] [system.net.webrequest]::create("ftpurl"+$fileinf.name)
$upFTP.UseBinary = $true;
$upFTP.Credentials = New-Object System.Net.NetworkCredential("username","password")
$upFTP.Method=[system.net.WebRequestMethods+ftp]::UploadFile
$upFTP.KeepAlive=$false
$sourceStream = New-Object System.Io.StreamReader($fileInf.fullname)
$fileContents = [System.Text.Encoding]::UTF8.GetBytes($sourceStream.ReadToEnd())
$sourceStream.Close();
$upFTP.ContentLength = $fileContents.Length;
$requestStream = $upFTP.GetRequestStream();
$requestStream.Write($fileContents, 0, $fileContents.Length);
$requestStream.Close();
$response =$upFTP.GetResponse();
$response.StatusDescription
$response.Close(); 
 
#ftpurl:ftp路径
#username:ftp用户名
#password:ftp密码
#localfilename:要上传的文件名
下载和续传因为没有业务需求所以没做出来,日后有心情再做