Avatar billede crapman Nybegynder
25. oktober 2004 - 08:33 Der er 1 løsning

Kopiere filer og lave en log over fejl

Hejsa,
Jeg har en Mac OS X server, som jeg skal kopiere en pæn bunke filer fra (ca. 2000 GB)...

Mit problem er nu, at der er nogle sti-navne der er for lange til at blive kopieret, da windows maks. kan håndtere et vist antal tegn... derfor skal jeg bruge et script som kan skrive en logfil over hvilke filer der ikke er blevet kopieret...

Desuden foregår det via netværk, så er lidt usikker på hvordan det skal håndteres...

...og som en sidste ting, ville det være en lækker funktion, hvis man kunne se hvilken fil den kopierer, da det vil taget omkring et døgn at kopiere det hele...

:) Håber der er nogle der kan hjælpe...
Avatar billede tofte Juniormester
25. oktober 2004 - 14:47 #1
option explicit
'on error resume next
dim targetFolder,sourceFolder

sub log(msg)
    objLog.writeline(msg)
end sub

function Chk(sourceFolder,targetFolder)
    chk=true
    if not objFSO.FolderExists(sourceFolder) then
        MsgBox("Kan ikke åbne kilde : "&sourceFolder)
        chk=false
    end if

    if not objFSO.FolderExists(targetFolder) then
        msgBox("Kan ikke åbne destination : "&targetFolder)
        chk=false
    end if
end function

sub doCopy(sourceFolder,targetFolder)
    dim folder,fileCol,folderCol,fil
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

    set folder = objFSO.getFolder(sourceFolder)
    set fileCol = folder.Files
    set folderCol=folder.SubFolders

    For Each fil in filecol
        'if not objFSO.FileExists(targetFolder&"\"&fil.name) then
        on error resume next
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
            If Err.Number = 0 Then
                'log "Copying file: "&sourceFolder&"\"&fil.name
            else
              log "Can not copy file: "&sourceFolder&"\"&fil.name
            end if
        'end if
    next   
    For Each folder in folderCOl
        'if not objFSO.FolderExists(targetFolder&"\"&folder.name) then
            objFSO.CreateFolder(targetFolder&"\"&folder.name)
            If Err.Number = 0 Then
                'log "Creating folder: "&sourceFolder&"\"&folder.name
            else
                log "Can not copy folder: "&sourceFolder&"\"&folder.name
            end if

        'end if
        doCopy sourceFolder&"\"&folder.name,targetFolder&"\"&folder.name   
    next   
    set fileCol = nothing
    set folderCol = nothing
    set folder = nothing
end sub

Dim objFSO,cont,logfile
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

sourceFolder="C:\test"
targetFolder="C:\test1"
logfile="C:\log.txt"

dim wshShell,objLog
Set WshShell = CreateObject("WScript.Shell")
if objFSO.FileExists(logfile) then
    msgBox "Logfilen : "&logfile&" skal slettes inden kopiering begyndes"
else
    set objLog = objFSO.CreateTextFile(logfile, True)
    WshShell.Popup "Begynder kopiering", 2, , 0

    if (chk (sourceFolder,targetFolder)) then doCopy sourceFolder,targetFolder

    WshShell.Popup "Kopiering afsluttet", 5, , 0
    set objLog = nothing
end if

Set objFSO = nothing
Set WshShell = nothing

ovenstående virker, hvis du kopierer til en mappe, hvor filerne ikke findes i forvejen. Hvis filerne findes i forvejen fejlmeldes disse filer. Har ikke kunne teste ovenstående med for lange filer, men det burde virke.

du skal bare lige rette :
sourceFolder="C:\test"
targetFolder="C:\test1"
logfile="C:\log.txt"
så det kommer til at passe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester