2010-09-13 64 views
1

我需要用vbscript来抓取ftp站点的文件,其中文件名的格式为“vendor(date)(date)(random#).zip “。这些文件每天更新​​,所以我需要一个正则表达式或方式来选择服务器上的最新文件并下载它。我知道如何在本地文件系统上处理这个问题,但我不知道如何确定在远程ftp服务器上获得哪个文件。vbscript抓取FTP站点上的最新文件

回答

2

有趣的你发布了这个,因为我最近不得不删除一个脚本来做几乎完全一致的单词你要求的。基本上,你真正需要做的就是让脚本创建一个FTP命令文件,然后调用它。

使用你选择的方法来创建一个字符串来保存你想要的任何格式的日期,我把它称为strDate,在我的情况下它最终成为这个语法:headerinfo.13September10其中headerinfo是一个标准文件头附上一个数字。

写了一个FTP命令文件:以后你的脚本

Dim objOutStream 
Set objOutStream = objFSO.OpenTextFile(strCommandFile, ForWriting, True, TristateFalse) 
With objOutStream 
    .WriteLine "USER xxxxxx" ' USERNAME 
    .WriteLine "xxxxxxftp"  ' Password 
    .WriteLine "binary" 
    .WriteLine "prompt n" 
    .WriteLine "lcd " & strNetmonData ' FOLDER I'm changing into 
    .WriteLine "mget *." & strDate ' Get all files with today's date in it 
    .WriteLine "bye" 
    .Close 
End With 

然后你只需把它叫做:

WSHShell.Run "%comspec% /c FTP -n -s:" & strCommandFile & " " & strSite, 0, True 

哪里strSite是要尝试连接的网站的IP地址或名称至。

0

以下代码将帮助您从ftp服务器获取最新的文件名,然后您可以下载它。

Const ForWriting = 2 

Dim objOutStream, objjFSO, objShell 

Set objFSO = CreateObject("Scripting.FileSystemObject") 

Set objOutStream = objFSO.OpenTextFile("C:\temp\temp\empty.txt", ForWriting,True) 

With objOutStream 

.WriteLine sUsername ' USERNAME 

.WriteLine sPassword  ' Password 

.WriteLine "cd /"& sRemotePath' FOLDER I'm changing into 

.WriteLine "ls -rt tmp/listing.txt"  

.WriteLine "quit" 

.Close 

End With 

Set objShell = CreateObject("WScript.Shell") 

objShell.Run "%Comspec% /c FTP -i -s:" & "C:\temp\temp\empty.txt" & " " & sSite 

wait(2) 

Set strCommand = objShell.Exec ("%Comspec% /c head -1 tmp\listing.txt") 

Set objStdOut = strCommand.StdOut 

    strFilename = objStdOut.ReadLine