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...
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.