Avatar billede majsmarken Nybegynder
14. september 2004 - 13:20 Der er 19 kommentarer og
1 løsning

Opfølgning: Automatisk med Z interval copy fil fra X til Y

Opfølgning på http://www.eksperten.dk/spm/456886
Beskrivelse af programmet kan læses samme sted...

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

Option Explicit

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

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

If WScript.Arguments.Count < 3 Then
    WScript.Echo "Error in command. For Right use, type:" & vbCrLf _
    & "CScript SpotAndCopy.vbs [TIME] [Source] [Destination] [LogFile]" & vbCrLF & vbCrLf _
    & "EX:" & vbCrLf & "CScript SpotAndCopy.vbs 10 C:\Source C:\Destination C:\logfile.txt"
    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"
LogFile = WScript.Arguments(3)        'Source & "\LogFile.log"

Set oCatalog = oFS.GetFolder(Source)
Set oFiles = oCatalog.Files
Set LogFile = oFS.OpenTextFile(LogFile, ForAppending, True)


Do
    For Each file In oFiles
        If file.Size > 0 Then
            Copy(file)
        End If
    Next
    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)

    LogFile.WriteLine Time & " " & Date & " " & Msg

End Function
'---------------------------------------------------------------------


Program:
Hvis Source eller Dest ikke er tilgængeligt så går programmet i stå ?

Ønsket tilretning:
At få programmet til at på en eller anden måde checke om Source eller Dest er tilgængelig undervejs uden at programmet "dør" ved (forsøg på) copy process? Og så automatisk prøve igen efter lidt tid...
I mit tilfælde er Source og Dest et mappet netværksdrev (på hver sin server) og Logfil er på en tredie server !!!
Jeg bruger pt. 15 sek. interval.


I retning af:
  If not exist [Source] or if not exist [Dest] skip_copy ...
eller hvad det kaldes i dette sprog...

Skriv for yderligerer info...
Avatar billede tofte Juniormester
05. oktober 2004 - 19:57 #1
Er ikke helt med på hvornår problemet opstår, men prøv med følgende...
Bemærk den kontrollerer om logfilen findes. Hvis den ikke gør det fejler den også. Så derfor hvis du sletter logfilen, så husk lige at oprette en tom logfil med det rigtige navn.


Option Explicit

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

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

If WScript.Arguments.Count < 3 Then
    WScript.Echo "Error in command. For Right use, type:" & vbCrLf _
    & "CScript SpotAndCopy.vbs [TIME] [Source] [Destination] [LogFile]" & vbCrLF & vbCrLf _
    & "EX:" & vbCrLf & "CScript SpotAndCopy.vbs 10 C:\Source C:\Destination C:\logfile.txt"
    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"
LogFileP = WScript.Arguments(3)        'Source & "\LogFile.log"

Set oCatalog = oFS.GetFolder(Source)
Set oFiles = oCatalog.Files
Set LogFile = oFS.OpenTextFile(LogFileP, ForAppending, True)


Do
  if (oFS.FolderExists(source) AND oFS.FolderExists(Destination) AND oFS.FileExists(LogFileP)) then
    For Each file In oFiles
        If file.Size > 0 Then
            Copy(file)
        End If
    Next
   
  else
  msgBox "dur ikke"
  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)

    LogFile.WriteLine Time & " " & Date & " " & Msg

End Function
'---------------------------------------------------------------------
Avatar billede majsmarken Nybegynder
05. oktober 2004 - 23:21 #2
Jubii - endelig en som svarer...

Jeg afprøver sidst på ugen.

Info følger...
Avatar billede tofte Juniormester
13. oktober 2004 - 23:26 #3
Fik du til at virke?
Avatar billede majsmarken Nybegynder
16. oktober 2004 - 16:22 #4
(Hjem fra 1 uges ferie - uden computer)
Vender tilbage i løbet af kommende uge...
Avatar billede majsmarken Nybegynder
18. oktober 2004 - 06:23 #5
Foreløbig ser det ud til at virke...

Vil lige lade den rulle en uges tid for at checke om den 'dør' på noget tidspunkt.

Feedback følger...
Avatar billede majsmarken Nybegynder
23. oktober 2004 - 12:38 #6
Script: SpotAndCopy.vbs
Linie: 66
Tegn: 9
Fejl: Filen blev ikke fundet
Kode: 800A0035
Kilde: Der opstod en Microsoft VBScript-kørselfejl

Hmmm...
Et eller andet tidspunkt i løbet af natten har [Source] eller [Destination] formegentlig været "ikke tilgængelig" ...
Avatar billede tofte Juniormester
23. oktober 2004 - 12:57 #7
Så må jeg desværre melde pas.
Avatar billede majsmarken Nybegynder
23. oktober 2004 - 12:59 #8
Der er måske en mulighed for at evt. fejlmeddelser kan ignoreres og programmet vil på en eller anden måde fortsætte alligevel ?
Avatar billede tofte Juniormester
23. oktober 2004 - 13:01 #9
du kan prøve at skrive
on error resume next
i toppen under option explicit
Avatar billede majsmarken Nybegynder
23. oktober 2004 - 13:32 #10
OK - er hermed indskrevet.
Og programmet genstartet - intet 'brok' derfra foreløbig...

Mere info følger...
Avatar billede majsmarken Nybegynder
24. oktober 2004 - 18:57 #11
Jeg gennemførte lige en prøve:
Fjernet netværksstikket på den PC som ruller programmet; bemærk at Source og Dest et mappet netværksdrev (på hver sin server).
Så dukkede [dur ikke] op ...
Remarket
'msgBox "dur ikke"
og så er der ikke nogle (fejl)meddelser !!!
Og programmet kunne fortsætte med diverse Copy da netværksstikket kom på plads igen...

Mere info følger i løbet af ugen...
Avatar billede tofte Juniormester
04. november 2004 - 23:05 #12
kører det?
Avatar billede majsmarken Nybegynder
05. november 2004 - 06:25 #13
Sidste check over weekenden...
Men ser meget lovende ud!!!
Avatar billede majsmarken Nybegynder
05. november 2004 - 17:59 #14
En lille (anden) detalje:
I source findes en fil: STEMNING.JPG
Den bliver følgeligt copy til target: STEMNING.JPG
Lidt efter bliver i source oprettet en fil: stemning.jpg

Da der allerede findes en fil i target: STEMNING.JPG går der 'ged' i systemet.
Skriver hele tiden i logfilen at "stemning.jpg Has been copied..." og så gør den det IKKE alligevel...

Det er altså noget med UPPERCASE/lowercase i filnavnet som der 100% skal checkes for ?
Avatar billede tofte Juniormester
05. november 2004 - 18:27 #15
kan du ikke lige sende hele koden som den ser ud til mig. Så jeg ikke sidder og retter i noget forkert. Hvis du bare sender den til min mail, er det fint. Du skal nok lige omdøbe filen, idet min mail ikke er glad for at modtage filer af typen vbs.

Jeg skal lige høre, idet der oprettes en fil stemning.jpg, og der allerede findes en fil med navnet STEMNING.JPG, skal filen stemning.jpg vel ikke kopieres?

Mail : Rasmus@fjordloekke.dk
Avatar billede majsmarken Nybegynder
05. november 2004 - 19:09 #16
Done... Som "Spot&Copy.zip" incl logfilen

Filen [stemning.jpg] skal kopieres - selvfølgelig med samme 'case' ...

Jo - det er selvfølgelig noget 'skrald' med både
[stemning.jpg]
[STEMNING.JPG]

men da det er/kan være forskellige brugerer så kan det ende sådan.

Jeg (og brugerene) ved godt at man dermed kan komme til at overskrive en anden fil; der kommer ingen varsel fra det program som opretter (grafik)filen...
Avatar billede tofte Juniormester
11. december 2004 - 22:27 #17
Har du fået det til at virke?
Avatar billede majsmarken Nybegynder
11. december 2004 - 22:31 #18
Undskyld - har "næste" glemt denne pga. andre opgaver...

Info følger - ved næste arbejdsdag...
Avatar billede majsmarken Nybegynder
12. januar 2005 - 22:06 #19
I'm Back...

Der er åbenbart ændret et eller andet i Unix/Samba systemet med nyeste patch/update; nu ka' den godt uden at jeg har rettet noget...

Sååå....

Alle er glade...

<tofte>: Send et [Svar] for POINT - nu 200 ...
Avatar billede tofte Juniormester
13. januar 2005 - 12:13 #20
det var heldigt
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