<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: BackUp файлов с рекурсивным перебором каталогов]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=419&amp;type=atom" />
	<updated>2007-06-25T16:08:10Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=419</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: BackUp файлов с рекурсивным перебором каталогов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=3284#p3284" />
			<content type="html"><![CDATA[<p>Поскольку постоянно спрашивают, привожу пример скрипта, который делает простейший BackUp файлов без подкаталогов и без условий. Копируем только файлы из одного определённого каталога в другой. В каталоге скрипта создаётся лог-файл CopyLog.log.<br /></p><div class="codebox"><pre><code>InitialFolder = &quot;C:\Job\AutoHotkey&quot; &#039; каталог, откуда копируем
TargetFolder = &quot;C:\Temp\Temp&quot; &#039; каталог, куда копируем
&#039;====================================================================
On Error Resume Next
Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
LogPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
Set LogStream = objFSO.OpenTextFile(LogPath &amp; &quot;\CopyLog.log&quot;, 8, True)
LogStream.WriteLine &quot;Начало копирования &quot; &amp; Now()

&#039;Если каталог назначения не существует, создадим его
If Not objFSO.FolderExists(TargetFolder) Then
    objFSO.CreateFolder TargetFolder
    If Err.Number Then Breakdown
End If
For Each objFile In objFSO.GetFolder(InitialFolder).Files
    TargetPath = TargetFolder &amp; &quot;\&quot; &amp; objFile.Name
    &#039; если у файла назначения есть атрибут ReadOnly, снимаем его
    If objFSO.FileExists(TargetPath) Then
        Set objTargetFile = objFSO.GetFile(TargetPath)
        If objTargetFile.Attributes And 1 Then
            objTargetFile.Attributes = objTargetFile.Attributes - 1
            If Err.Number Then Breakdown
        End If
    End If
    objFSO.CopyFile objFile.Path, TargetPath, True
    If Err.Number Then Breakdown
    LogStream.WriteLine TargetPath
Next
If Err.Number Then Breakdown

LogStream.WriteLine &quot;Конец копирования: &quot; &amp; Now()
LogStream.Close

&#039; процедура аварийного выхода
Sub Breakdown()
    LogStream.WriteLine Err.Number &amp; &quot;:&quot; &amp; Err.Description
    LogStream.WriteLine &quot;Аварийный выход: &quot; &amp; Now()
    LogStream.Close
    WScript.Quit
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2007-06-25T16:08:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=3284#p3284</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: BackUp файлов с рекурсивным перебором каталогов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=2589#p2589" />
			<content type="html"><![CDATA[<p>Пример скрипта, который делает BackUp файлов с рекурсивным перебором каталогов. Копируем файлы из одного определённого каталога в другой. Копируем только файлы с датой создания, меньшей указанной. В каталоге скрипта создаётся лог-файл CopyLog.log.<br /></p><div class="codebox"><pre><code>InitialFolder = &quot;C:\Job&quot; &#039; каталог, откуда копируем
TargetFolder = &quot;C:\Temp\Temp&quot; &#039; каталог, куда копируем
ControlDate = CDate(&quot;01.08.2006&quot;) &#039; контрольная дата (копируем файлы с датой создания раньше этой)
&#039;====================================================================
On Error Resume Next
Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objShellApp = CreateObject(&quot;Shell.Application&quot;)
LogPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
Set LogStream = objFSO.OpenTextFile(LogPath &amp; &quot;\CopyLog.log&quot;, 8, True)
LogStream.WriteLine &quot;Начало копирования &quot; &amp; Now()

CopyFiles InitialFolder
LogStream.WriteLine &quot;Конец копирования: &quot; &amp; Now()
LogStream.Close

&#039; процедура рекурсивно перебирает файлы в каталоге
Sub CopyFiles(FolderPath)
    On Error Resume Next
    Set objFolderItems = objShellApp.NameSpace(FolderPath).Items()
    For Each objFolderItem In objFolderItems
        If objFolderItem.IsFolder And LCase(Right(objFolderItem.Name, 4)) &lt;&gt; &quot;.zip&quot; Then
            CopyFiles objFolderItem.Path
        Else
            Set objFile = objFSO.GetFile(objFolderItem.Path)
            If objFile.DateCreated &lt; ControlDate Then
                CopyFile objFolderItem.Path
            End If
        End If
    Next
End Sub

&#039; процедура копирует файл
Sub CopyFile(FilePath)
    On Error Resume Next
    SubPath = Mid(FilePath, Len(InitialFolder) + 1)
    TargetPath = TargetFolder &amp; SubPath
    FolderPath = objFSO.GetParentFolderName(TargetPath)
    If Not objFSO.FolderExists(FolderPath) Then
        CreateFolder FolderPath
    End If
    &#039; если у файла назначения есть атрибут 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 &lt;&gt; 0 Then
        LogStream.WriteLine
        LogStream.WriteLine FilePath
        LogStream.WriteLine Err.Description
        LogStream.WriteLine
        Err.Clear
    Else
        LogStream.WriteLine TargetPath
    End If
End Sub

&#039; процедура создаёт каталог
Sub CreateFolder (FolderPath)
    On Error Resume Next
    ParentFolder = objFSO.GetParentFolderName(FolderPath)
    If Not objFSO.FolderExists(ParentFolder) Then
        CreateFolder ParentFolder
    End If
    objFSO.CreateFolder FolderPath
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2007-04-21T13:39:17Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=2589#p2589</id>
		</entry>
</feed>
