Avatar billede henrik_79 Nybegynder
04. oktober 2004 - 22:45 Der er 16 kommentarer og
1 løsning

Kopier filer og mapper fra et netvæksdrev til et andet !

Jeg skal bruge et script der kan kopiere/synkronisere alle filer fra en netværksmappe til en anden uden at den kopierer dem der allerede findes på destinationen.

Der skal være en popup/box eller hvad den nu kaldes hvor der står:
Kopierer:
~Pågældende fil~

Hvis et af drevene ikke er tilgængelig skal den skrive det i en alertbox og derefter afslutte !

Er der nogen der kan lave det ??
Avatar billede henrik_79 Nybegynder
05. oktober 2004 - 00:13 #1
Hvis jeg ikke har forklaret mig godt nok kan i bare sige til !!
Avatar billede kedde65 Praktikant
05. oktober 2004 - 08:22 #2
Hej

Jeg skal nok lige kigge på det i løbet af dagen :-)

VH CK
Avatar billede henrik_79 Nybegynder
05. oktober 2004 - 20:02 #3
Det lyder kanont :-)
Avatar billede tofte Juniormester
05. oktober 2004 - 20:05 #4
Har du set på
http://www.eksperten.dk/spm/539535.
Med meget få rettelser så burde det virke som du ønsker!
Avatar billede henrik_79 Nybegynder
05. oktober 2004 - 22:17 #5
tofte >> Hvis jeg kunne lave de rettelser havde jeg ik oprettet spørgsmålet :-)
Avatar billede tofte Juniormester
06. oktober 2004 - 10:53 #6
Det er ikke noget problem, rettelserne kommer her:

Jeg er ikke helt med når det gælder popupboksen, men prøv og se om det ikke er det du mener. Du skal bare gemme nedenstående som etellerandet.vbs. Og kalde filen fra en dosprompt eller kør, med 3 parametre
filnavn sek kilde dest

Sek er antal sekunder der skal gå mellem hver gang programmet undersøger for nye filer. kilde er sti til mappen som skal undersøges eks C:\test,  og dest er distinationsmappen

Option Explicit

Dim WshShell, oFS, Source, Destination, oCatalog, file, oFiles,  SleepTimer
Set WshShell = CreateObject("WScript.Shell")
Set oFS = CreateObject("Scripting.FileSystemObject")

Const ForReading = 1, ForWriting = 2, ForAppending = 8

If WScript.Arguments.Count < 2 Then
    WScript.Echo "Error in command. For Right use, type:" & vbCrLf _
    & "CScript SpotAndCopy.vbs [TIME] [Source] [Destination]" & vbCrLF & vbCrLf _
    & "EX:" & vbCrLf & "CScript SpotAndCopy.vbs 10 C:\Source C:\Destination "
    WScript.Echo SleepTimer
    WScript.Quit
End If

SleepTimer = WScript.Arguments(0)    'Time in Seconds
SleepTimer = SleepTimer * 1000
Source = WScript.Arguments(1)        '"c:\temp\Source"
Destination = WScript.Arguments(2)    '"c:\temp\Destination"


Set oCatalog = oFS.GetFolder(Source)
Set oFiles = oCatalog.Files



Do
  if (oFS.FolderExists(source) AND oFS.FolderExists(Destination)) then
    For Each file In oFiles
        If file.Size > 0 Then
            Copy(file)
        End If
    Next
   
  else
  MsgBox("Destination eller kilde kan ikke åbnes")
  WScript.Quit
  end if
  WScript.Sleep SleepTimer
Loop


WshShell = "Nothing"
oFS = "Nothing"
LogFile.Close
LogFile = "Nothing"


'---------------------------------------------------------------------
Function Copy(file)

    Dim DestinationFile, DF
 
    DestinationFile = Right(file, (Len(file)-InStrRev(file, "\", -1, vbTextCompare)))

    If Not oFS.FileExists(Destination & "\" & DestinationFile) Then
        oFS.CopyFile file, Destination & "\" & DestinationFile, True
        If Err.Number = 0 Then
            Log(DestinationFile & " Has been copied.")
        Else
            Log("Copy og file " & file & " has failed with the following message: " & Err.Description)
        End If
        Err.Clear
    Else
        Set DF = oFS.GetFile(Destination & "\" & DestinationFile)
        If file.DateLastModified <> DF.DateLastModified Then
            oFS.CopyFile file, Destination & "\" & DestinationFile, True
            If Err.Number = 0 Then
                Log(DestinationFile & " Has been copied.")
            Else
                Log("Copy og file " & file & " has failed with the following message: " & Err.Description)
            End If
            Err.Clear
        End if
    End If
 
End Function
'---------------------------------------------------------------------
Function Log(Msg)

    MsgBox Msg

End Function
'---------------------------------------------------------------------
Avatar billede tofte Juniormester
06. oktober 2004 - 11:27 #7
Det var vist et svar. Håber du kan bruge det, ellers må vi jo lige rette lidt i det.
Avatar billede henriktha Nybegynder
07. oktober 2004 - 00:17 #8
Nu fik jeg vist ikke skrevet det helt som jeg mente, med "alle filer" mente jeg mapper og undermapper osv....

Desuden duer den popup ikke, da der er tale om ca. 400 filer og gider ikke trykke ok hver gang :-)

Desuden skal det ikke køre timed men kun den ene gang man starter programmet
Avatar billede tofte Juniormester
07. oktober 2004 - 16:56 #9
så har jeg kigget lidt på det. Lige et spørgsmål, skal der være en popupboks, eller er det ok med en log fil. Det er nemlig ikke muligt at lave andet end en popupboks i VB. Man kan i ren VB lave en boks som selv forsvinder efter 1 sek, og så kommer der en ny som også forsvinder .... Det er nok lidt træls hvis det er 400 filer. Hvis man skal have noget som selv skifter skal man til at indrage eks Internet Explorer!

Og lige et andet spørgsmål. Kan det tænkes at netværksforbidelsen forsvinder mens man kopierer?
option explicit
dim targetFolder,sourceFolder

sub log(msg)
    msgBox msg
end sub

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
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
            log "Copying file: "&sourceFolder&"\"&fil.name
        end if
    next   
    For Each folder in folderCOl
        if not objFSO.FolderExists(targetFolder&"\"&folder.name) then
            objFSO.CreateFolder(targetFolder&"\"&folder.name)
            log "Creating folder: "&sourceFolder&"\"&folder.name

        end if
        doCopy sourceFolder&"\"&folder.name,targetFolder&"\"&folder.name   
    next   
    set fileCol = nothing
    set folderCol = nothing
    set folder = nothing
end sub
Dim objFSO,cont
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

cont = true

sourceFolder="C:\test"
targetFolder="C:\test1"

if not objFSO.FolderExists(sourceFolder) then
    msgBox("Kan ikke åbne kilde : "&sourceFolder)
    cont=false
end if

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

if cont then
    doCopy sourceFolder,targetFolder
end if
Avatar billede tofte Juniormester
07. oktober 2004 - 16:57 #10
bemærk det postede svar indeholder stadigt popupboksen...
Avatar billede henriktha Nybegynder
07. oktober 2004 - 19:03 #11
Nej det er nærmest ikke nødvendig med den popup så.....

Kan du ikke lige lave så der står Kopierer når man starter scriptet, og den så forsvinder 1 sek efter scriptet er færdigt??

Forbindelsen kan måske godt forsvinde da det er trådløst netværk der er tale om......
Avatar billede tofte Juniormester
07. oktober 2004 - 20:13 #12
Det er svært at lave en popup som er der hele tiden, idet programmet venter på svar fra brugeren og det fortsætter ikke før boksen forsvinder eller man trykker ok. Så nu kommer der en i starten og en til slut.

option explicit
dim targetFolder,sourceFolder

sub log(msg)
    'msgBox 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 Quit()
    MsgBox "Forbindelsen til netværket afbrudt"
    WScript.Quit
end sub

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
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
            If Err.Number = 0 Then
                log "Copying file: "&sourceFolder&"\"&fil.name
            else
              Quit()
            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
                Quit()
            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
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

sourceFolder="C:\test"
targetFolder="C:\test1"

dim wshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.Popup "Begynder kopiering", 2, , 0

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

WshShell.Popup "Kopiering afsluttet", 5, , 0
Avatar billede tofte Juniormester
07. oktober 2004 - 20:15 #13
lige en rettelse til de sidste to linier
if (chk (sourceFolder,targetFolder)) then
    doCopy sourceFolder,targetFolder
    WshShell.Popup "Kopiering afsluttet", 2, , 0
end if

altså et end if til sidst og et linieskift efter then
Avatar billede henrik_79 Nybegynder
07. oktober 2004 - 21:09 #14
Hov lige en sidste ting, kan du også lave så filer der ikke findes på source slettes fra destination eller er det for omfattende at komme igang med ???

Smider gerne flere points i hvis det er....
Avatar billede tofte Juniormester
08. oktober 2004 - 00:25 #15
det er rimeligt meget at lave. Man kan jo slette alle filer, inden man begynder at kopiere, men så går lidt af ideen jo af det. Det er ret svært at lave det andet. Men jeg skal lige tænke over det. Der går nok lige et par dage. Da jeg har dårligt tid de næste par dage, men som sagt, det er ikke lige til.
Avatar billede henrik_79 Nybegynder
08. oktober 2004 - 08:27 #16
Hmm.... okay... håber du kommer i tanke om det..

Du får lige points her indtil videre :-)
Avatar billede tofte Juniormester
12. oktober 2004 - 12:07 #17
Så skulle det være klar

option explicit
dim targetFolder,sourceFolder

sub log(msg)
    'msgBox 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 Quit()
    MsgBox "Forbindelsen til netværket afbrudt"
    WScript.Quit
end sub

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

    set folder = objFSO.getFolder(sourceFolder)
    set tFolder = objFSO.getFolder(targetFolder)

    set tFolderCol=tFolder.SubFolders
    set tFileCol=tFolder.Files

    set fileCol = folder.Files
    set folderCol=folder.SubFolders
   
    FileStr=""
    For Each fil in tFileCol
        FileStr=FileStr&";"&fil.name&";,"
    next
    FolderStr=""
    For Each folder in tFolderCol
        FolderStr=FolderStr&";"&folder.name&";,"
    next
    For Each fil in filecol
        if not objFSO.FileExists(targetFolder&"\"&fil.name) then
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
           
            If Err.Number = 0 Then
                log "Copying file: "&sourceFolder&"\"&fil.name
            else
              Quit()
            end if
        end if
        FileStr=Replace(FileStr,";"&fil.name&";,","")
    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
                Quit()
            end if

        end if
        FolderStr=Replace(FolderStr,";"&folder.name&";,","")
        doCopy sourceFolder&"\"&folder.name,targetFolder&"\"&folder.name   
    next   

    set fileCol = nothing
    set folderCol = nothing
    set folder = nothing
   
    dim delArrFile,delArrFolder,a

    if len(FileStr)>0 then
        delArrFile=split(FileStr,",")
        For a = LBound(delArrFile) to UBound(delArrFile)-1
            objFSO.DeleteFile(targetFolder&"\"&replace(delArrFile(a),";",""))   
        next
    end if

    if len(FolderStr)>0 then
       
        delArrFolder=split(FolderStr,",")
        For a = LBound(delArrFolder) to UBound(delArrFolder)-1
            objFSO.DeleteFolder(targetFolder&"\"&replace(delArrFolder(a),";",""))   
        next
    end if
   
    set tFileCol = nothing
    set tFolderCol = nothing
    set tFolder = nothing   
end sub

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

sourceFolder="C:\test"
targetFolder="C:\test1"

Set WshShell = CreateObject("WScript.Shell")
WshShell.Popup "Begynder kopiering", 2, , 0

if (chk (sourceFolder,targetFolder)) then
    doCopy sourceFolder,targetFolder
    WshShell.Popup "Kopiering afsluttet", 2, , 0
end if

Set WshShell = nothing
Set objFSO = nothing
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