MLHA - PC - Software - Programmering - Script - WSH - BackUp

Alle backprogrammer benytter filernes 'arkivbit', som aktiveres når en fil bliver oprettet eller ændret. Backupprogrammet kan finde filer med aktiv arkivbit - kopiere filen - og deaktivere arkivbitten. Følgende backupscript benytter denne teknik til at finde ændrede filer i de specificerede foldere. Koden her indeholder eksempler på angivelsen af foldere og filer som skal kopieres - og hvor der skal kopieres til. Sti og navn på kopierede filer udskrives på skærmen og i en logfil.

 

Eksempler på specifikationer i koden::

 

BackUp destination folder - dvs hvor filerne skal kopieres hen:

Bfolder = "D:\back\"
Bfolder = "\\server\backup"

Stibetegnelsen kan valgfrit afsluttes med '\'

 

Folder med indhold som skal kopieres (P = Path):

P "c:\"
P "C:\Programmer\Microsoft Office\Skabeloner\"

Stibetegnelsen kan valgfrit afsluttes med '\'

   

Filer som skal kopieres (BF = Back File).
Filerne findes i den folder som sidst er angivet.
Filerne kan evt angives med 'wildcart' (*):

P "c:\"
BF "autoexec.bat"
BF "config.sys"
P "c:\dokumenter"
BF "*.doc"

 

Foldere som skal kopieres (BD = Back Directory).
Folderne findes i den folder som sidst er angivet.

P "C:\WINDOWS\"
BD "Foretrukne"
BD "Menuen Start"
BD "SendTo"

 

Hele programmet:

Const ForWriting = 2
count = 0
sti = ""
'---------------------
' Log File (back.txt):
'---------------------
Set fs = CreateObject("Scripting.FileSystemObject")
set tf = fs.OpenTextFile("D:\back.txt", ForWriting, True)
prnt date & " " & time
'================================================================================
' P  : Path
' BF : Backup File
'      Filenames may use wildcards - but only at end of filename and/or extension
'      Ex:     OK: dat*.n*, *.*
'          not OK: *dag.*x
' BD : Backup Directory
'================================================================================
' BackUp destination folder:
'-------------------------
Bfolder = "\\M\D\BackC-C"
'-------------------------
P "c:\"
BF "autoexec.bat"
BF "config.sys"
BD "BAT"
BD "Download"

P "C:\inetpub\"
BD "wwwroot"

P "C:\Programmer\Microsoft Office\Skabeloner\"
BF "normal.dot"

P "C:\WINDOWS\"
BD "Foretrukne"
BD "Menuen Start"
BD "SendTo"

P "C:\Windows\Application Data\"
BD "Identities"

P "C:\WINDOWS\Application Data\Microsoft\"
BD "Outlook"

'-------------------------
Bfolder = "\\M\D\BackC-D"
'-------------------------
P "D:\"
BD "Billeder"
BD "Dokumenter"
BD "Download"
'============================================================

prnt FileCount

tf.Close
Set tf = nothing
Set fs = nothing

MsgBox FileCount

'============ END =============== SUBROUTINES :

'--------------------------------
' P : Set Path
'--------------------------------
Sub P(path)
  sti = path
  if right(sti, 1) <> "\" then sti = sti + "\"
  prnt ""
  prnt "===" & sti
End Sub

'--------------------------------
' BF : Back File
'--------------------------------
Sub BF(navn)
  if instr(navn,"*") then
    s1 = ""
    s2 = ""
    pp = instr(navn,".")
    f1 = left(navn,pp-1)
    f2 = mid(navn,pp+1)
    p1 = instr(f1,"*")
    p2 = instr(f2,"*")

    if p1 then s1 = left(f1, p1-1)
    if p2 then s2 = left(f2, p2-1)

    BackWild
  else
    set f = fs.GetFile(sti & navn)
    backFile f
  end if
End Sub

'--------------------------------
' BD : Back Directory
'--------------------------------
Sub BD(navn)
   f = sti & navn
   prnt "     \" & navn
   BackFolder f
End Sub

'--------------------------------
' BackFile
'--------------------------------
Sub backFile(f)
   if f.Attributes and 32 then
      dfn = Bfolder & mid(f.ParentFolder, 3)
      if right(dfn, 1) <> "\" then dfn = dfn + "\"

      if not fs.folderexists(dfn) then FolderCreate dfn
      fs.Copyfile f, dfn & f.name
      f.Attributes = f.Attributes - 32

      prnt "*  " & f
      count = count + 1
   end if
End Sub

'-------------------------------
' BackWild
'-------------------------------
Sub backWild()
   Set f = fs.GetFolder(sti)
   set fc = f.files
   for each fil in fc
      ext = mid(fil.name,instr(fil.name,".")+1)
      w = (left(fil.name,len(s1)) = s1 AND left(ext,len(s2)) = s2)
      if w then backFile fil
   next
End Sub

'-------------------------------
' backFolder
'-------------------------------
Sub backFolder(fn)
   Set f = fs.GetFolder(fn)
   set fc = f.files
   for each fil in fc
      backFile fil
   next

   Set sf = f.SubFolders
   For Each f1 in sf
      If Left(f1.name, 4) <> "_vti" then BackFolder f1.path
   Next
End Sub

'----------------------------

Sub we(s)
  wscript.echo s
End Sub

Sub prnt(s)
  we s
  tf.Writeline s
End Sub

Function FileCount()
  if count = 1 then
    FileCount = "1 fil"
  else
    FileCount = count & " filer"
  end if
End Function

Sub FolderCreate(fn)
   pfn = fs.GetParentFolderName(fn)
   if not fs.folderexists(pfn) then FolderCreate pfn
   fs.CreateFolder fn
End Sub