Нужен vbs скрипт

Узнай цену своей работы

Формулировка задачи:

Помогите со скриптом, который из одной папки в другую копирует все файлы, кроме последнего по времени и дате создания... например, если в студии работает прога по звукозаписи, а последний фалй в папке еще в процессе записи, то именно этот файл копировать не нужно, а все остальные копруются...этот файл скопируется позже...
пользуюсь вот этим скриптом:
Листинг программы
  1. ' Создание объектов оболочки и файловой системы
  2. Set oShell = CreateObject("wscript.shell")
  3. Set oFSO = CreateObject("Scripting.Filesystemobject")
  4. Set WSNetwork = CreateObject("WScript.Network")
  5. LogFolder = "C:\авб\"
  6. StartFolder = "c:\1\"
  7. aEndFolder = array("c:\kopii\")
  8.  
  9. '***********************************************
  10. ' обнуление и описание счетчиков, используемых в скрипте
  11. num_EndFolder = 0 '- общее число папок, места назначения для копируемых данных
  12. num_EndFolder_0 = 0 '- не доступное кол-во папок из num_EndFolder
  13. num_files = 0 '- общее число обработанных файлов
  14. num_files_copy = 0 '- из них скопировано с заменой на новую версию
  15. err_files_copy = 0 '- из них не скопировано в результате ошибки при работе с num_files_copy
  16. num_files_new = 0 '- из них скопировано новых файлов
  17. err_files_new = 0 '- из них не скопировано в результате ошибки при работе с num_files_new
  18. num_SubFolder = 0 '- обработано папок и подпапок
  19. num_SubFolder_copy = 0 '- из них скопировано новых папок и подпапок
  20. err_SubFolder = 0 '- из них не скопировано в результате ошибки при работе с num_SubFolder
  21.  
  22. '***********************************************
  23. ' Создание лог-файла
  24. ' Задаем имя лога
  25. sLogName = "LogTemp_" & Date & "_" & Time
  26. ' Заменяем в имени все знаки на подчеркивания
  27. sLogName = Replace(sLogName, ".", "_")
  28. sLogName = Replace(sLogName, ":", "_")
  29. sLogName = LogFolder & sLogName
  30. ' Создаем файл
  31. Set oLogFile = oFSO.CreateTextFile(sLogName & ".log",true)
  32. oLogFile.WriteLine "========== Script Information ==========" & vbCrLf
  33. oLogFile.WriteLine "script name: Fail_Copying"
  34. oLogFile.WriteLine "version: 1.0"
  35. oLogFile.WriteLine "date: 10.08.12"
  36. oLogFile.WriteLine "autor: MasterLin"
  37. oLogFile.WriteLine "site: http://www.masterlin.ru" & vbCrLf
  38. oLogFile.WriteLine "========== Запуск скрипта ==========" & vbCrLf
  39.  
  40. '***********************************************
  41.  
  42. Set oEndFolder = CreateObject("Scripting.FileSystemObject")
  43. ' Цикл для перебора папок "куда копируем"
  44. For i=0 to UBound (aEndFolder)
  45. ' Счетчик кол-ва папок для копируемых данных
  46. num_EndFolder=num_EndFolder+1
  47. ' Проверяем доступность папки, в которую хотим произвести копирование
  48. If oEndFolder.FolderExists ( aEndFolder(i) ) Then
  49. ' Записываем результат в лог
  50. oLogFile.Writeline "Папка " & "'" & aEndFolder(i) & "'" & " доступна для работы" & vbCrLf
  51. CopyFolder StartFolder,aEndFolder(i)
  52. ' Счетчик доступных для копирования папок
  53. ' удолил :)
  54. else
  55. ' Записываем результат в лог
  56. oLogFile.Writeline
  57. oLogFile.Writeline "Папка " & "'" & aEndFolder(i) & "'" & " в настоящий момент не доступна. Работа с ней прекращена." & vbCrLf
  58. ' Дублируем сообщение, выводом предупреждения на экран
  59. WScript.Echo "Папка " & "'" & aEndFolder(i) & "'" & " в настоящий момент не доступна. Работа с ней прекращена."
  60. ' Счетчик недоступных для копирования папок
  61. num_EndFolder_0=num_EndFolder_0+1
  62. End if
  63. Next
  64.  
  65. Sub CopyFolder(sCopyFolder,sEndCopyFolder)
  66. ' Создание объекта Folder
  67. Set oFolder = oFSO.GetFolder(sCopyFolder)
  68. Set oEndCopyFolder = oFSO.GetFolder(sEndCopyFolder)
  69. ' Получение коллекции файлов
  70. Set colFiles = oFolder.Files
  71. ' Обработка каждого файла из коллекции
  72. For each oFile in colFiles
  73. oLogFile.Writeline "Дата создания копируемого файла:"
  74. oLogFile.Writeline oFile & vbTab & oFile.DateCreated
  75. ' Счетчик числа проверяемых файлов
  76. num_files=num_files+1
  77. ' Проверяем существует уже такой файл в папке, если его нет, то копируем.
  78. ' Если есть, то проверяем его актуальность и заменяем более новым, если он устарел.
  79. If oFSO.FileExists(oFSO.BuildPath(oEndCopyFolder, oFile.Name)) Then
  80. ' Записываем результат в лог
  81. oLogFile.Writeline "Такой файл уже существует в папке " & oEndCopyFolder
  82. ' Проверяем насколько это свежая копия файла, для этого сравниваем даты создания двух файлов
  83. oLogFile.Writeline "Проверяем актуальность копии:"
  84. ' Выгружаем полный путь к проверяемому файлу
  85. sFileEnd = oFSO.BuildPath(oEndCopyFolder, oFile.Name)
  86. ' Создаем объект File, для работы с этим файлом
  87. Set oFileEnd = oFSO.GetFile(sFileEnd)
  88. ' Сравниваем даты изменения файлов
  89. If oFileEnd.DateLastModified < oFile.DateLastModified Then
  90. ' Проверяемый файл оказался устаревшим, поэтому заменяем его более новым
  91. oLogFile.Writeline "Копия файла устарела, заменяем его новым. **********" & vbCrLf
  92. oFSO.CopyFile oFile, sEndCopyFolder & oFile.Name, True
  93. ' если у файла назначения есть атрибут ReadOnly, снимаем его
  94. If objFSO.FileExists(TargetPath) Then
  95. Set objFile = objFSO.GetFile(TargetPath)
  96. If objFile.Attributes And 1 Then
  97. objFile.Attributes = objFile.Attributes - 1
  98. End If
  99. End If
  100. objFSO.CopyFile FilePath, TargetPath, True
  101. If Err.Number <> 0 Then
  102. LogStream.WriteLine
  103. LogStream.WriteLine FilePath
  104. LogStream.WriteLine Err.Description
  105. LogStream.WriteLine
  106. Err.Clear
  107. Else
  108. LogStream.WriteLine TargetPath
  109. End If
  110.  
  111. ' Проверка на наличие ошибок
  112. if err.Number <> 0 then
  113. ' Запись сообщения об ошибке в лог
  114. oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
  115. ' Очистка ошибки
  116. Err.Clear
  117. ' Счетчик ошибок при замене файлов
  118. err_files_copy=err_files_copy+1
  119. else
  120. ' Счетчик файлов, которые были заменены на новые
  121. num_files_copy=num_files_copy+1
  122. End if
  123. else
  124. ' В этом случае копия прошла проверку, просто продолжаем работу скрипта далее
  125. oLogFile.Writeline "Копия актуальна. Продолжаем работу." & vbCrLf
  126. End if
  127. else
  128. ' Записываем результат в лог
  129. oLogFile.Writeline "Этот файл отсутствует в папке " & oEndCopyFolder & " Давайка его скопируем." & vbCrLf
  130. oFSO.CopyFile oFile, sEndCopyFolder & oFile.Name, True
  131.  
  132. ' Проверка на наличие ошибок
  133. if err.Number <> 0 then
  134. ' Запись сообщения об ошибке в лог
  135. oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
  136. ' Очистка ошибки
  137. Err.Clear
  138. ' Счетчик ошибок при копировании новых файлов
  139. err_files_new=err_files_copy+1
  140. else
  141. ' Счетчик новых скопированных файлов
  142. num_files_new=num_files_copy+1
  143. End if
  144. End if
  145. Next
  146. ' Проверяем все папки и подпапки
  147. oLogFile.Writeline "Обрабатываем и копируем все подпапки из папки " & oEndCopyFolder & vbCrLf
  148. ' Получение коллекции подпапок
  149. Set colSubFolders = oFolder.SubFolders
  150. ' Обработка каждой подпапки
  151. For Each oSubFolder In colSubFolders
  152. oLogFile.Writeline "Проверяем подпапку " & oSubFolder
  153. ' Счетчик обработанных папок и подпапок
  154. num_SubFolder=num_SubFolder+1
  155. ' Проверяем существует уже такая подпапка в папке, если ее нет, то копируем.
  156. ' Если есть, то переходим к проверке файлов в подпапке.
  157. If oFSO.FolderExists(oFSO.BuildPath(oEndCopyFolder, oFSO.GetBaseName(oSubFolder.Path))) Then
  158. ' Записываем результат в лог
  159. oLogFile.Writeline "Такая подпапка уже существует в папке " & oEndCopyFolder
  160. oLogFile.Writeline "Проверяем все файлы в этой подпапке: "
  161. ' Выгружаем полный путь к проверяемоой подпапке
  162. sSubFolderEnd = oFSO.BuildPath(oEndCopyFolder, oFSO.GetBaseName(oSubFolder.Path)) & "\"
  163. ' Производим рекурсивный вызов процедуры копирования файлов - программа вызывает сама себя
  164. CopyFolder oSubFolder, sSubFolderEnd
  165. ' oLogFile.Writeline
  166. else
  167. ' Записываем результат в лог
  168. oLogFile.Writeline "Эта подпапка отсутствует в папке " & oEndCopyFolder & " Давайка ее скопируем." & vbCrLf
  169. oFSO.CopyFolder oSubFolder, sEndCopyFolder, True
  170. ' Проверка на наличие ошибок
  171. if err.Number <> 0 then
  172. ' Запись сообщения об ошибке в лог
  173. oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
  174. ' Очистка ошибки
  175. Err.Clear
  176. ' Счетчик ошибок при копировании новых папок и подпапок
  177. err_SubFolder=err_SubFolder+1
  178. else
  179. ' Счетчик новых скопированных папок и подпапок
  180. num_SubFolder_copy=num_SubFolder_copy+1
  181. End if
  182. End if
  183. Next
  184. End Sub

все файлы из одной папки копируются куда надо, за исключением файла, который в процессе записи...
и выдается ошибка:
строка 142
символ 4
Ошибка: Разрешение отклонено
Код: 800А0046
как исправить? помогите плиз, люди добрые!!!

Решение задачи: «Нужен vbs скрипт»

textual
Листинг программы
  1. On Error Resume Next

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут