Скрипт для загрузки файла и переименования по дате на машине с Windows Vista? - PullRequest
1 голос
/ 27 марта 2010

Мне нужно ежедневно запускать скрипт, который будет загружать файл из фиксированного местоположения и сохранять его на моем компьютере с соответствующей меткой времени filename-YYYYMMDD-HHSS.ext. Мне нужна историческая запись того, что этот файл был в то время. Я могу вручную проверить и посмотреть, какие были изменения, поэтому сравнение не требуется.

(я искал онлайн-сервис, который бы сделал это для меня, но я думаю, что локально работающий скрипт на моей машине был бы достаточно хорош).

Несмотря на то, что на моей машине есть php, я бы предпочел, чтобы это было встроенное решение для Windows, на случай, если мне придется (вероятно) адаптировать его к чьей-то системе (нетехническим).

Если у кого-то есть что-то подобное и он может внести код - помощь будет очень признательна !!

D

Ответы [ 3 ]

1 голос
/ 31 марта 2010

Ваша задача может быть легко написана с использованием языков Windows Script Host - VBScript или JScript .

Чтобы загрузить файл из Интернета, вы можете использовать объект XMLHTTP для запроса содержимого файла с сервера, а затем использовать объект ADO Stream , чтобы сохранить его в файл на диске.

Что касается отметки времени, проблема в том, что ни VBScript, ни JScript не имеют встроенных функций, которые форматировали бы дату в нужном вам формате, поэтому вам придется написать код, чтобы сделать это самостоятельно. Например, вы можете разбить дату на части, дополнить их, если необходимо, и объединить их вместе. Или вы можете использовать объект WMI SWbemDateTime, который использует формат даты yyyymmddHHMMSS.mmmmmmsUUU, и просто извлечь из него часть 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

Не стесняйтесь спрашивать, если вам нужно больше объяснений.

0 голосов
0 голосов
/ 27 марта 2010

Система контроля версий, такая как Mercurial, может сделать это для вас без необходимости переименовывать файл. Сценарий может быть таким простым: (получите wget здесь и Mercurial здесь ):

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

Приятной особенностью этого является то, что фиксация не произойдет, если содержимое файла не изменилось.

Чтобы просмотреть историю, используйте журнал hg или TortoiseHg (расширение оболочки).

...