Тема: VBScript: копирование с USB в папку на компьютере, с проверками
Попросили помочь в написании скрипта, а я сам не особо в этом шарю. Задача такова:
Определить, изменялась ли заданная пользователем папка за последний месяц. Если нет, скопировать в нее файлы со съемного носителя. Проверить наличие съемного носителя, вывести список имеющихся на ней файлов и удостовериться, что на рабочем диске достаточно места. Создать файл, записав туда тип диска, с которого выполнялось копирование и его метку. Файлу присвоить атрибут «Скрытый».
Порылся по форуму, почитал немного литературу, и слепил такого Франкенштейна.
strTarget = Trim(InputBox("set path to copy"))
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
Set tFolder = fso.GetFolder(strTarget)
Set sDrive = fso.GetDrive(strSource)
Set sFolder = fso.GetFolder(strSource) ' флешка-источник
If Age>30 Then
Set lDrive = tFolder.Drive.DriveLetter ' получаем диск папки назначения
Set uDrive = sDrive.DriveLetter ' получаем диск папки-источника
drFree = (FormatNumber(lDrive.AvailableSpace/1024, 0) - (FormatNumber(uDrive.TotalSize/1024, 0) - FormatNumber(uDrive.AvailableSpace/1024, 0)) - 1024)
If drFree > 0 Then
usbDrive
sFolder.Copy tFolder
Else
WScript.Echo("Not enough space on destination drive")
End If
WScript.Echo("Destination folder was in use in last 30 days")
End If
'======================================
Function Age(tFolder)
Age = DateDiff("d", tFolder.DateLasModified, Now())
End Function
'======================================
Sub usbDrive
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'Win32_LogicalDisk'" & _
" AND TargetInstance.DriveType = 2")
Set objReceivedEvent = objEvents.NextEvent
Set strSource = objReceivedEvent.TargetInstance.Name
Set Folder = fso.GetFolder(strSource)
For Each File In Folder.Files
WScript.Echo File.Name
Set logLine = "VolumeType:" & objReceivedEvent.TargetInstance.DriveType & VbCrLf & _
"VolumeName: " & objReceivedEvent.TargetInstance.VolumeName
Set Folder = FSO.GetFolder(strTarget)
Set TextStream = Folder.CreateTextFile("log.txt")
TextStream.WriteLine logLine
TextStream.Close
set logFile = fso.GetFile(strTarget & "log.txt") ' как получить только что созданный файл, чтобы назначить ему атрибут?
logFile.Attributes = 2
End Sub
Теперь вопросы по порядку:
1. Проверка последнего использования папки в функции Age, скрипт нашёл на форуме, по идее проблем быть не должно;
2. Проверка наличия свободного места. Что думаете по этому поводу?
3. Проверка наличия съёмного носителя, находил на форуме, вроде вставил правильно. Но есть сомнения.
4. С записью в текстовый файл информации о флешке вроде не должно быть, но вот как затем его сделать скрытым...
5. Ну и собственно организовать копирование. Корректно ли я его сделал.
Ну и при запуске выдаёт ошибку на последней строке. Ошибка: предполагается наличие инструкций