Нужен vbs скрипт
Формулировка задачи:
Помогите со скриптом, который из одной папки в другую копирует все файлы, кроме последнего по времени и дате создания... например, если в студии работает прога по звукозаписи, а последний фалй в папке еще в процессе записи, то именно этот файл копировать не нужно, а все остальные копруются...этот файл скопируется позже...
пользуюсь вот этим скриптом:
все файлы из одной папки копируются куда надо, за исключением файла, который в процессе записи...
и выдается ошибка:
строка 142
символ 4
Ошибка: Разрешение отклонено
Код: 800А0046
как исправить? помогите плиз, люди добрые!!!
пользуюсь вот этим скриптом:
' Создание объектов оболочки и файловой системы
Set oShell = CreateObject("wscript.shell")
Set oFSO = CreateObject("Scripting.Filesystemobject")
Set WSNetwork = CreateObject("WScript.Network")
LogFolder = "C:\авб\"
StartFolder = "c:\1\"
aEndFolder = array("c:\kopii\")
'***********************************************
' обнуление и описание счетчиков, используемых в скрипте
num_EndFolder = 0 '- общее число папок, места назначения для копируемых данных
num_EndFolder_0 = 0 '- не доступное кол-во папок из num_EndFolder
num_files = 0 '- общее число обработанных файлов
num_files_copy = 0 '- из них скопировано с заменой на новую версию
err_files_copy = 0 '- из них не скопировано в результате ошибки при работе с num_files_copy
num_files_new = 0 '- из них скопировано новых файлов
err_files_new = 0 '- из них не скопировано в результате ошибки при работе с num_files_new
num_SubFolder = 0 '- обработано папок и подпапок
num_SubFolder_copy = 0 '- из них скопировано новых папок и подпапок
err_SubFolder = 0 '- из них не скопировано в результате ошибки при работе с num_SubFolder
'***********************************************
' Создание лог-файла
' Задаем имя лога
sLogName = "LogTemp_" & Date & "_" & Time
' Заменяем в имени все знаки на подчеркивания
sLogName = Replace(sLogName, ".", "_")
sLogName = Replace(sLogName, ":", "_")
sLogName = LogFolder & sLogName
' Создаем файл
Set oLogFile = oFSO.CreateTextFile(sLogName & ".log",true)
oLogFile.WriteLine "========== Script Information ==========" & vbCrLf
oLogFile.WriteLine "script name: Fail_Copying"
oLogFile.WriteLine "version: 1.0"
oLogFile.WriteLine "date: 10.08.12"
oLogFile.WriteLine "autor: MasterLin"
oLogFile.WriteLine "site: http://www.masterlin.ru" & vbCrLf
oLogFile.WriteLine "========== Запуск скрипта ==========" & vbCrLf
'***********************************************
Set oEndFolder = CreateObject("Scripting.FileSystemObject")
' Цикл для перебора папок "куда копируем"
For i=0 to UBound (aEndFolder)
' Счетчик кол-ва папок для копируемых данных
num_EndFolder=num_EndFolder+1
' Проверяем доступность папки, в которую хотим произвести копирование
If oEndFolder.FolderExists ( aEndFolder(i) ) Then
' Записываем результат в лог
oLogFile.Writeline "Папка " & "'" & aEndFolder(i) & "'" & " доступна для работы" & vbCrLf
CopyFolder StartFolder,aEndFolder(i)
' Счетчик доступных для копирования папок
' удолил :)
else
' Записываем результат в лог
oLogFile.Writeline
oLogFile.Writeline "Папка " & "'" & aEndFolder(i) & "'" & " в настоящий момент не доступна. Работа с ней прекращена." & vbCrLf
' Дублируем сообщение, выводом предупреждения на экран
WScript.Echo "Папка " & "'" & aEndFolder(i) & "'" & " в настоящий момент не доступна. Работа с ней прекращена."
' Счетчик недоступных для копирования папок
num_EndFolder_0=num_EndFolder_0+1
End if
Next
Sub CopyFolder(sCopyFolder,sEndCopyFolder)
' Создание объекта Folder
Set oFolder = oFSO.GetFolder(sCopyFolder)
Set oEndCopyFolder = oFSO.GetFolder(sEndCopyFolder)
' Получение коллекции файлов
Set colFiles = oFolder.Files
' Обработка каждого файла из коллекции
For each oFile in colFiles
oLogFile.Writeline "Дата создания копируемого файла:"
oLogFile.Writeline oFile & vbTab & oFile.DateCreated
' Счетчик числа проверяемых файлов
num_files=num_files+1
' Проверяем существует уже такой файл в папке, если его нет, то копируем.
' Если есть, то проверяем его актуальность и заменяем более новым, если он устарел.
If oFSO.FileExists(oFSO.BuildPath(oEndCopyFolder, oFile.Name)) Then
' Записываем результат в лог
oLogFile.Writeline "Такой файл уже существует в папке " & oEndCopyFolder
' Проверяем насколько это свежая копия файла, для этого сравниваем даты создания двух файлов
oLogFile.Writeline "Проверяем актуальность копии:"
' Выгружаем полный путь к проверяемому файлу
sFileEnd = oFSO.BuildPath(oEndCopyFolder, oFile.Name)
' Создаем объект File, для работы с этим файлом
Set oFileEnd = oFSO.GetFile(sFileEnd)
' Сравниваем даты изменения файлов
If oFileEnd.DateLastModified < oFile.DateLastModified Then
' Проверяемый файл оказался устаревшим, поэтому заменяем его более новым
oLogFile.Writeline "Копия файла устарела, заменяем его новым. **********" & vbCrLf
oFSO.CopyFile oFile, sEndCopyFolder & oFile.Name, True
' если у файла назначения есть атрибут ReadOnly, снимаем его
If objFSO.FileExists(TargetPath) Then
Set objFile = objFSO.GetFile(TargetPath)
If objFile.Attributes And 1 Then
objFile.Attributes = objFile.Attributes - 1
End If
End If
objFSO.CopyFile FilePath, TargetPath, True
If Err.Number <> 0 Then
LogStream.WriteLine
LogStream.WriteLine FilePath
LogStream.WriteLine Err.Description
LogStream.WriteLine
Err.Clear
Else
LogStream.WriteLine TargetPath
End If
' Проверка на наличие ошибок
if err.Number <> 0 then
' Запись сообщения об ошибке в лог
oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
' Очистка ошибки
Err.Clear
' Счетчик ошибок при замене файлов
err_files_copy=err_files_copy+1
else
' Счетчик файлов, которые были заменены на новые
num_files_copy=num_files_copy+1
End if
else
' В этом случае копия прошла проверку, просто продолжаем работу скрипта далее
oLogFile.Writeline "Копия актуальна. Продолжаем работу." & vbCrLf
End if
else
' Записываем результат в лог
oLogFile.Writeline "Этот файл отсутствует в папке " & oEndCopyFolder & " Давайка его скопируем." & vbCrLf
oFSO.CopyFile oFile, sEndCopyFolder & oFile.Name, True
' Проверка на наличие ошибок
if err.Number <> 0 then
' Запись сообщения об ошибке в лог
oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
' Очистка ошибки
Err.Clear
' Счетчик ошибок при копировании новых файлов
err_files_new=err_files_copy+1
else
' Счетчик новых скопированных файлов
num_files_new=num_files_copy+1
End if
End if
Next
' Проверяем все папки и подпапки
oLogFile.Writeline "Обрабатываем и копируем все подпапки из папки " & oEndCopyFolder & vbCrLf
' Получение коллекции подпапок
Set colSubFolders = oFolder.SubFolders
' Обработка каждой подпапки
For Each oSubFolder In colSubFolders
oLogFile.Writeline "Проверяем подпапку " & oSubFolder
' Счетчик обработанных папок и подпапок
num_SubFolder=num_SubFolder+1
' Проверяем существует уже такая подпапка в папке, если ее нет, то копируем.
' Если есть, то переходим к проверке файлов в подпапке.
If oFSO.FolderExists(oFSO.BuildPath(oEndCopyFolder, oFSO.GetBaseName(oSubFolder.Path))) Then
' Записываем результат в лог
oLogFile.Writeline "Такая подпапка уже существует в папке " & oEndCopyFolder
oLogFile.Writeline "Проверяем все файлы в этой подпапке: "
' Выгружаем полный путь к проверяемоой подпапке
sSubFolderEnd = oFSO.BuildPath(oEndCopyFolder, oFSO.GetBaseName(oSubFolder.Path)) & "\"
' Производим рекурсивный вызов процедуры копирования файлов - программа вызывает сама себя
CopyFolder oSubFolder, sSubFolderEnd
' oLogFile.Writeline
else
' Записываем результат в лог
oLogFile.Writeline "Эта подпапка отсутствует в папке " & oEndCopyFolder & " Давайка ее скопируем." & vbCrLf
oFSO.CopyFolder oSubFolder, sEndCopyFolder, True
' Проверка на наличие ошибок
if err.Number <> 0 then
' Запись сообщения об ошибке в лог
oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
' Очистка ошибки
Err.Clear
' Счетчик ошибок при копировании новых папок и подпапок
err_SubFolder=err_SubFolder+1
else
' Счетчик новых скопированных папок и подпапок
num_SubFolder_copy=num_SubFolder_copy+1
End if
End if
Next
End Sub
все файлы из одной папки копируются куда надо, за исключением файла, который в процессе записи...
и выдается ошибка:
строка 142
символ 4
Ошибка: Разрешение отклонено
Код: 800А0046
как исправить? помогите плиз, люди добрые!!!
Решение задачи: «Нужен vbs скрипт»
textual
Листинг программы
On Error Resume Next