1. Новичок1с 01.11.16 10:40 Сейчас в теме

копирование данных с помощью VBS

Добрый день.

Помогите пожалуйста разобраться с функцией копирования файлов.

FileCopy-создаётся файл *.dt, FileCopyNew-постоянный путь
Function MyFileDT (ByVal FileCopy)
dim fso
	On Error Resume Next
	Set fso = WScript.CreateObject("Scripting.FileSystemObject")
		MyFileDT = (fso.FileExists(FileCopy)) 
    Set fso = Nothing
end Function

Function FileCopyFun (byval FileCopy , byval FileCopyNew)

		Dim objFSO
		Const OverwriteExisting = True
		On Error Resume Next
                Set objFSO = CreateObject("Scripting.FileSystemObject")
				objFSO.CopyFile FileCopy , FileCopyNew, OverwriteExisting
			Set objFSO = Nothing
'Запись в лог файл
		AppendToFile strLogFileName, "Что скопировали:      " & FileCopy 
		AppendToFile strLogFileName, "Куда скопировали:     " & FileCopyNew	
               AppendToFile strLogFileName, "Функция копирования сработала!!"
		
end Function
Показать


в другой процедуре вызываю эту функцию

FileCopyFun FileCopy82,FileCopyNew82

либо так

FileCopyFun BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\" & BasesList(I).BaseBackUpFileName & " " & Replace(cstr(now()), ":", ".") & ".dt" , "f:\BackUp1C\2016\"
(все переменные BackUpFolder, BasesList и другие- в лог. файле отлично сохраняются)

Данные из лог. файла
Что скопировали: f:\BackUp1C\2016\Камин\Камин 2.0.65.45 01.11.2016 9.37.06.dt
Куда скопировали: f:\BackUp1C\2016\
Функция копирования сработала!!

Когда из функции убираю On Error Resume Next
тогда возникает ошибка- не определены пути файлов.
К сожалению, копирование не происходит

Подскажите пожалуйста, как правильно передать параметры в функцию из другой процедуры и из-за чего возникает ошибка.

Благодарю за помощь.
Ответы
Сортировка: Древо
5. S.V.Y 17 25.11.16 12:11 Сейчас в теме
(1) Лог пишет, это хорошо, а данные то копирует? Функция On Error Resume Next в случае ошибки продолжает работу со строки, которая идет после строки с ошибкой, а если ее убрать, то ошибка становится критичной и скрипт работать перестает. Т.е. ошибка в скрипте, или в передаваемых параметрах.
Мне кажется - Что скопировали: f:\BackUp1C\2016\Камин\Камин 2.0.65.45 01.11.2016 9.37.06.dt - тут какой-то корявый путь, тем более что в вызове & Replace(cstr(now()), ":", ".") & ".dt" идет замена фактических символов в пути файла. Может в этом проблема?
6. v3rter 25.11.16 12:53 Сейчас в теме
(5)
Replace(cstr(now()), ":", ".")
С одной стороны, здесь в текущей дате-времени заменяются недопустимые в имени файла двоеточия на допустимые точки. С другой стороны дата-время берется на момент исполнения команды, то есть за время выгрузки время меняется и происходит попытка скопировать файл уже с другим именем. То есть либо имя файла с датой временем надо где-то временно сохранять, либо делать выгрузку во временный файл с фиксированным именем (не забывая удалять предыдущий или после успешного копирования) а при копировании добавлять отметку. Возможно так:
FileCopyFun BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\" & BasesList(I).BaseBackUpFileName & ".dt" , "f:\BackUp1C\2016\"& BasesList(I).BaseBackUpFileName & " " & Replace(cstr(now()), ":", ".") & ".dt"

При этом надо будет убрать
& " " & Replace(cstr(now()), ":", ".")
из выгрузки dt.

Кстати, если выгружаете в .dt (формат, не гарантирующий 100% возможности восстановления из него базы), то чем не устраивает Effector Saver редакции free ?
2. fallen_santa 02.11.16 10:07 Сейчас в теме
Вам для чего? Резервное копирование баз?
3. Новичок1с 02.11.16 10:36 Сейчас в теме
Сейчас делаются копии архивов другим скриптом, мне хотелось бы созданный dt файл (скрипт из интернета, работает) сразу же этим же скриптом копировать на другой компьютер.
4. fallen_santa 02.11.16 12:07 Сейчас в теме
Как вариант, я вот так когда-то делал (Сам скрипт не мой):


BackupAll Array("\\server\accounting\", "\\server\builder\")

Sub BackupAll(MyArray)
	mDate=cstr(DatePart("yyyy", Now)) + "-" + Right("00" & cstr(DatePart("m", Now)), 2) + "-" + Right("00" & cstr(DatePart("d", Now)), 2)
	mTime=""
	mPath="d:\backups_1c\"
	mType="zip"

	response=MsgBox("Создать бэкап всех баз данных?", 3)
	If response=2 Then exit sub
	If MsgBox("Добавить текущее время к имени файла?", 4 + 256) = 6 Then mTime="_" + Right("00" & cstr(DatePart("h", Now)), 2) + "-" +Right("00" & cstr(DatePart("n", Now)), 2)

	Set folders = CreateObject("Scripting.Dictionary")
	For each folder in MyArray
		folders.Add folder, false
	Next

	If response=6 Then
		For each folder in folders
			folders(folder)=True
		Next
	elseIf response=7 Then
		For each folder in folders
			response1 = MsgBox("Создать бэкап ''" + folder + "'' ?", 3)
			If response1=2 Then exit sub
			If response1=6 Then folders(folder)=True
		Next
	end If

	For each folder in folders
		If folders(folder)=True Then CreateArchive mPath, replace(folder, "\", "_"), mDate + mTime,  mType, folder
	Next
End Sub

Sub CreateArchive(mPath, mName, mDate, mType, pathData)
	pathArhive=mPath & mName & mDate & "." & mType
	
	'Создание архива
	Set WshShell = CreateObject("WScript.Shell")
	Set oExec = WshShell.Exec("C:\Program Files\WinRAR_old\WinRAR.exe u -af" + mType + " -ep1 -r -y -dh " + pathArhive + " " + pathData)
	Do While oExec.Status = 0
     WScript.Sleep 100
	Loop
	
	'Удаление старых архивов для текущей папки
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	Set objFolder = objFSO.GetFolder(".")
	Set colFiles = objFolder.Files
	For Each objFile in colFiles
		If DateDIff("D", objFile.DateLastModIfied, Now) > 30 Then ' проверка файлов на старость
			If len(objFile.Name)>len(mName) Then
				If left(objFile.Name, len(mName))=mName Then 
					Log (objFile.Name)
					objFile.Attributes = 0
					objFile.Delete
				End If
			End If
		End If
	Next
End Sub

'функция для создания log-файла. он создается рядом со скриптом, имя - дата запуска скрипта.
Function Log(strLineToLog)
	Const ForReading = 1, ForWriting = 2
	Dim fso, f, FileLog

	Set fso = CreateObject("Scripting.FileSystemObject")
	FileLog = Left(WScript.ScriptName,(Len(WScript.ScriptName)-4)) & "_" & DatePart("yyyy",Date) & "_" & DatePart("m",Date) & "_" & DatePart("d",Date) & "." & "log"
	Set f = fso.OpenTextFile(FileLog, 8, True)
	f.Write strLineToLog & vbCrLf
	f.Close
End Function
Показать


Скрипт берет файлы из указанной шары, пакует их раром (добавляя данные о времени/дате) и кладёт в нужное место. Поправить пути и можно пользоваться.
7. DarkDaemon 28.12.16 13:52 Сейчас в теме
А почему не хотите рассмотреть копирование через BAT-файл?
8. v3rter 29.12.16 14:16 Сейчас в теме
Кстати, навесить на файл дату-время и скопировать можно большинством архиваторов с опцией "без сжатия" или с минимальным сжатием.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии



Ведущий программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Руководитель проектов 1С
Москва
Полный день

Консультант-аналитик 1С: ЗУП
Санкт-Петербург
Полный день