【问题标题】:Script to download file and rename according to date on Windows Vista machine?在 Windows Vista 机器上根据日期下载文件和重命名的脚本?
【发布时间】:2011-02-01 11:38:29
【问题描述】:

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

(我一直在寻找可以为我执行此操作的在线服务,但我认为在我的机器上本地运行脚本就足够了)。

虽然我的机器上确实有 php,但我更喜欢它是纯 Windows 内置解决方案,以防我必须(可能)将其调整为其他人的系统(非技术人员)。

如果有人有类似的东西并且可以贡献代码 - 将不胜感激!

D

【问题讨论】:

  • 非常感谢!!!!!!!!!!!!!!!!!!!!!!!!!在尝试了数百件事之后,我将其用于更新程序。

标签: windows scripting wsh


【解决方案1】:

像 Mercurial 这样的版本控制系统可以为您做到这一点,而无需您重命名文件。脚本可能很简单(get wget here and Mercurial here):

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

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

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

【讨论】:

  • 这很好,马塞​​洛,但我正在寻找一个纯 Windows 解决方案 - 抱歉,这对我来说不会飞...... :(
【解决方案2】:

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

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

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

无论如何,这里有一个示例脚本(在 VBScript 中)说明了这个想法。我将原始文件名硬编码在 strFile 变量中,因为我懒得从 URL 中提取(而且如果 URL 没有指定文件名,例如在 http://www.google.com)。

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

如果您需要更多解释,请随时询问。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多