powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужен vbs скрипт
9 сообщений из 9, страница 1 из 1
Нужен vbs скрипт
    #38312853
egorka_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите со скриптом, который из одной папки в другую копирует все файлы, кроме последнего по времени и дате создания... например, если в студии работает прога по звукозаписи, а последний фалй в папке еще в процессе записи, то именно этот файл копировать не нужно, а все остальные копруются...этот файл скопируется позже...

пользуюсь вот этим скриптом:
Код: vbnet
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

как исправить? помогите плиз, люди добрые!!!
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313070
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On error
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313092
egorka_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
???
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313173
egorka_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нужно, чтобы скопировались все файлы... тот к которому в момент копирования доступа нет, его пропустить... он скопируется позже... при этом чтоб не выдавалось никаких сообщений на тему того, что файл не копируется и т.д....
копирование будет происходит с заданным интервалом времени...
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313370
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313376
egorka_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после какой строки вставить в скрипт?
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313610
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorka_1Помогите со скриптомвы уточните пожалуйста, вам именно помощь нужна или вы просто просите доработать скрипт, но сами в него вникать не хотите. Тогда и подход будет другой, просто сделают и все, не будут давать подсказок для самостоятельной работы
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313618
egorka_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если можно, то лучше конечно доработать скрипт...
...
Рейтинг: 0 / 0
Нужен vbs скрипт
    #38313669
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, весь скрипт набит проверками на ошибки, но нет самого главного.

Думаю, достаточно в самом начале скрипта поставить
Код: vbnet
1.
On Error Resume Next
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужен vbs скрипт
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]