我需要每天运行一个脚本,该脚本将从固定位置下载文件,并使用适当的文件名-YYYYMMDD-HHSS.ext时间戳将其保存在我的计算机上。我需要一个关于该文件在那个特定时间的历史记录。我可以手动检查并查看更改内容,因此不需要进行比较。
(我正在寻找能为我做这件事的在线服务,但我认为我机器上运行的本地脚本就足够了。)
虽然我的机器上有php,但我更喜欢它是一个纯粹的Windows内置解决方案,以防万一我必须(可能)适应其他人的系统(非技术人员)。
如果某人有这样的东西并且可以提供代码 - 那将非常感谢帮助!!
d
答案 0 :(得分:1)
您可以使用Windows脚本宿主语言轻松编写脚本 - VBScript或JScript。
要从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)