Помогите со скриптом, который из одной папки в другую копирует все файлы, кроме последнего по времени и дате создания... например, если в студии работает прога по звукозаписи, а последний фалй в папке еще в процессе записи, то именно этот файл копировать не нужно, а все остальные копруются...этот файл скопируется позже...
пользуюсь вот этим скриптом:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
' Создание объектов оболочки и файловой системы
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
Модератор: Учимся использовать тэги оформления кода -
FAQ
все файлы из одной папки копируются куда надо, за исключением файла, который в процессе записи...
и выдается ошибка:
строка 142
символ 4
Ошибка: Разрешение отклонено
Код: 800А0046
как исправить? помогите плиз, люди добрые!!!