копирование данных с помощью VBS
Добрый день.
Помогите пожалуйста разобраться с функцией копирования файлов.
FileCopy-создаётся файл *.dt, FileCopyNew-постоянный путь
в другой процедуре вызываю эту функцию
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
тогда возникает ошибка- не определены пути файлов.
К сожалению, копирование не происходит
Подскажите пожалуйста, как правильно передать параметры в функцию из другой процедуры и из-за чего возникает ошибка.
Благодарю за помощь.
Помогите пожалуйста разобраться с функцией копирования файлов.
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
тогда возникает ошибка- не определены пути файлов.
К сожалению, копирование не происходит
Подскажите пожалуйста, как правильно передать параметры в функцию из другой процедуры и из-за чего возникает ошибка.
Благодарю за помощь.
По теме из базы знаний
- В помощь пользователям КЗК 2
- Автоматическая архивация баз данных 1С 8.2, 8.1 и 7.7
- Скрипт VBS для резервного копирования 1c 8.x
- Компонента для прямого чтения/записи данных из файлов баз данных .1CD v.1.4.1 от 08.06.2020 (Windows/Linux)
- Конфигурация для создания резервных копий баз на сервере 1С: предприятие (SQL)
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) Лог пишет, это хорошо, а данные то копирует? Функция On Error Resume Next в случае ошибки продолжает работу со строки, которая идет после строки с ошибкой, а если ее убрать, то ошибка становится критичной и скрипт работать перестает. Т.е. ошибка в скрипте, или в передаваемых параметрах.
Мне кажется - Что скопировали: f:\BackUp1C\2016\Камин\Камин 2.0.65.45 01.11.2016 9.37.06.dt - тут какой-то корявый путь, тем более что в вызове & Replace(cstr(now()), ":", ".") & ".dt" идет замена фактических символов в пути файла. Может в этом проблема?
Мне кажется - Что скопировали: f:\BackUp1C\2016\Камин\Камин 2.0.65.45 01.11.2016 9.37.06.dt - тут какой-то корявый путь, тем более что в вызове & Replace(cstr(now()), ":", ".") & ".dt" идет замена фактических символов в пути файла. Может в этом проблема?
(5)
При этом надо будет убрать
Кстати, если выгружаете в .dt (формат, не гарантирующий 100% возможности восстановления из него базы), то чем не устраивает Effector Saver редакции free ?
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 ?
Как вариант, я вот так когда-то делал (Сам скрипт не мой):
Скрипт берет файлы из указанной шары, пакует их раром (добавляя данные о времени/дате) и кладёт в нужное место. Поправить пути и можно пользоваться.
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
ПоказатьСкрипт берет файлы из указанной шары, пакует их раром (добавляя данные о времени/дате) и кладёт в нужное место. Поправить пути и можно пользоваться.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)