25. januar 2004 - 22:40Der er
17 kommentarer og 1 løsning
Automatisk med Z interval copy fil fra X til Y + skriv i logfil
Jeg er indblandet i en system hvor der nogle gange bliver "smidt" en (grafik)fil på et sted som brugerne normalt ikke har adgang til.
I VBS 'freaks' er jo så dygtige og vil elske en sådan opgave:
Jeg ønsker et script som med [Time] sek. mellemrum checker om der er nogle NYE filer som er større end 0 på [source]. Så copy den/dem til [Dest] og noter reslutat i [Log]fil.
[Time],[Source],[Dest],[Log] skal være i kommandolinien eks.
Programmet skal køre rundt i en loop hele tiden på en Windows server der kan 'se' det hele. Den server bruges iøvrigt også til andre automatiske processer...
Evt. udbygning: Hvis der også kunne bestemmes hvilke typer filer der skal kikkes efter - i dette tilfælde *.JPG *.BMP *.TIF ?
Der findes måske et program iforvejen et eller andet sted ude i verden ?
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 End If
End Function '--------------------------------------------------------------------- Function Log(Msg)
LogFile.WriteLine Time & " " & Date & " " & Msg
End Function '---------------------------------------------------------------------
Godt "flækket lidt sammen" - det virker faktisk som hensigten... Er instaleret og ruller - men:
Systemet/bruger opretter en fil [Peter.jpg] på [Source] og så bliver den jo straks copy til [Dest] som ønsket - godt nok. Lidt efter opretter Systemet/bruger en anden fil med andet indhold men også kaldet for [Peter.jpg] (Systemet/bruger kan IKKE checke for om der findes en fil allerede med samme navn) så vil SpotAndCopy programmet jo ikke copy til [Dest] da der allerede findes en fil [Peter.jpg] ved [Dest].
Ka' det have sig rigtighed ? Det vil være i meget få tilfælde - men bare for at være garderet da der efterhånden kommer flere brugerer på - pt. 300 mulige brugerer...
Måske en mulighed for at checke på en form for TimeStamp mellem [Source]/[Dest] i samarbejde med [Len] ???
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 '---------------------------------------------------------------------
Part #1 Men jeg/vi har et ønske om at kunne "se" om programmet ruller som det skal. I nuværende version sker der jo "ingenting" på skærmen når programmer ruller og man kan så blive i tvivl om hvorvidt det er igang...
I loopen hvor der ventes (i nævnte eksempel 10 sek) skal der på skærmen vises et [.] for hver sekund samt [O] for hvert check. Samt evt. hvilke filer der bliver copy (hvis nogen) på samme måde som i logfilen.
Eks:
SpotAndCopy running: From [Source] To [Destination] every X second
..........O..........O..........O Peter.jpg has been copied ..........O..........O..........O..........O..........O..........O..........O..........O..........O..........O..........O..........O Pia25.jpg has been copied Monitor.jpg has been copied ..........O..........
osv...
Evt. kan denne skærminfo undertrykkes med en [/s] flag på i argument linien(s=silent/stille) hvis nogen vil det...
Part #2 Det virker som om logfilen blive helt låst for manuelt editering når programmet ruller ? Hvis du kunne arrangere at den bliver "åbnet" / ikke-låst når ønsket info er skrevet i den ? Det var for at kunne slette en del i den uden at skulle kvæle programmet først...
På nuværende tidspunkt har programet kørt i >1 uge og har copy 1765 filer OK !!! Iøvrigt er selve programmet på server1; eksekveres via server2; copy fra server3 til server4; logfil skrives på server5 - jo det virker...
Monty Pyton havde engang en sketch ved navn: "Spot The Looney" samt en slags PC spil baseret på samme - har det et eller andet ted i arkivet. Jeg kommer til at tænke på den mht. navnet: [SpotAndCopy] ... Ja - jeg er fra "den tid" ...
En "detalje": Hvis Source eller Target ikke er tilgængeligt - i mit tilfælde er det ved en server - så går programmet i stå ? Kan du få det til at på en eller anden måde checke om Source eller Target er tilgængelig uden at "dø" ?
"En "detalje": Hvis Source eller Target ikke er tilgængeligt - i mit tilfælde er det ved en server - så går programmet i stå ? Kan du få det til at på en eller anden måde checke om Source eller Target er tilgængelig undervejs uden at programmet "dør" ? Og så prøve igen efter lidt tid...
Programmet har kørt fint - ~5000 automatiske copy operationer er gennemført pt.
Problemet opstår hvis det f.eks. er et netværks share der er mappet, og den så af en eller anden grund ikke er tilgængelig? Eller er det et andet senario?
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.