在Windows Vista计算机上根据日期下载文件和重命名的脚本?

时间:2010-03-27 08:11:33

标签: windows scripting wsh

我需要每天运行一个脚本,该脚本将从固定位置下载文件,并使用适当的文件名-YYYYMMDD-HHSS.ext时间戳将其保存在我的计算机上。我需要一个关于该文件在那个特定时间的历史记录。我可以手动检查并查看更改内容,因此不需要进行比较。

(我正在寻找能为我做这件事的在线服务,但我认为我机器上运行的本地脚本就足够了。)

虽然我的机器上有php,但我更喜欢它是一个纯粹的Windows内置解决方案,以防万一我必须(可能)适应其他人的系统(非技术人员)。

如果某人有这样的东西并且可以提供代码 - 那将非常感谢帮助!!

d

3 个答案:

答案 0 :(得分:1)

您可以使用Windows脚本宿主语言轻松编写脚本 - VBScriptJScript

要从Internet下载文件,您可以使用XMLHTTP对象从服务器请求文件内容,然后使用ADO Stream对象将其保存到磁盘上的文件中。

至于时间戳,问题是VBScript和JScript都没有内置函数可以用你需要的格式格式化日期,所以你必须自己编写代码来执行此操作。例如,您可以将日期拆分为多个部分,必要时将它们填充并将它们连接在一起。或者您可以使用使用SWbemDateTime日期格式的WMI yyyymmddHHMMSS.mmmmmmsUUU对象,只需从中提取yyyymmddHHMMSS部分即可。

无论如何,这是一个示例脚本(在VBScript中),说明了这个想法。我在strFile变量中对原始文件名进行了硬编码,因为我懒得从URL中提取(并且如果URL没有指定文件名,例如 {{ 3}} 的)。

Dim strURL, strFile, strFolder, oFSO, dt, oHTTP, oStream

strURL    = "http://www.google.com/intl/en_ALL/images/logo.gif"  ''# The URL to download
strFile   = "logo.jpg"    ''# The file name
strFolder = "C:\Storage"  ''# The folder where to save the files

Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2

''# If the download folder doesn't exist, create it
Set oFSO = CreateObject("Scripting.FileSystemObject")
If Not oFSO.FolderExists(strFolder) Then
    oFSO.CreateFolder strFolder
End If

''# Generate the file name containing the date-time stamp
Set dt = CreateObject("WbemScripting.SWbemDateTime")
dt.SetVarDate Now
strFile = oFSO.GetBaseName(strFile) & "-" & Split(dt.Value, ".")(0) & "." & oFSO.GetExtensionName(strFile)

''# Download the URL  
Set oHTTP = CreateObject("MSXML2.XMLHTTP")  
oHTTP.open "GET", strURL, False
oHTTP.send

If oHTTP.Status <> 200 Then
    ''# Failed to download the file
    WScript.Echo "Error " & oHTTP.Status & ": " & oHTTP.StatusText
Else
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Type = adTypeBinary
    oStream.Open

    ''# Write the downloaded byte stream to the target file
    oStream.Write oHTTP.ResponseBody
    oStream.SaveToFile oFSO.BuildPath(strFolder, strFile), adSaveCreateOverWrite
    oStream.Close
End If

随意询问您是否需要更多解释。

答案 1 :(得分:0)

像Mercurial这样的版本控制系统可以为您完成此操作,而无需重命名文件。该脚本可能很简单(get wget here和Mercurial here):

wget http://blah-blah-blah.com/filename.ext
hg commit -m "Downloaded new filename.ext"

这样做的一个很好的功能是除非文件的内容发生了变化,否则不会发生提交。

要查看历史记录,请使用hg log或TortoiseHg(shell扩展名)。

答案 2 :(得分:0)