/ Forside/ Teknologi / Udvikling / VB Scripts / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB Scripts
#NavnPoint
technet 385
MouseKeep.. 300
Dark_Magi.. 250
natmaden 200
Harlekin 200
AntonV 200
EXTERMINA.. 200
gandalf 160
smorch 139
10  strarup 110
Flyt nyeste fil til netværksshare
Fra : webnoob
Vist : 299 gange
200 point
Dato : 29-01-16 20:16

Har vi en her på Kandu der kan lave et VB Script der kan tage den nyeste fil i en mappe og flytte den til en mappe på et netværksshare. Det skal køre på en server via opgavestyring.

 
 
Kommentar
Fra : EXTERMINATOR


Dato : 30-01-16 01:38

Er det bare noget ala dette her du skal bruge?

Kode
Dim objFSO, colFiles, objFile, strDestFolder, objNewestFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colFiles = objFSO.GetFolder( "C:\test")
strDestFolder = "\\NAS\backup\"

For Each objFile In colFiles.Files
   If objNewestFile = "" Then
      Set objNewestFile = objFile
   Else
      If objNewestFile.DateLastModified < objFile.DateLastModified Then
         Set objNewestFile = objFile
      End If
   End If
Next

If Not objNewestFile Is Nothing Then
   objFSO.CopyFile objNewestFile.Path,strDestFolder,True
End If


Kommentar
Fra : webnoob


Dato : 30-01-16 09:15

Det kunne det meget vel være, tester det senere.

Kommentar
Fra : EXTERMINATOR


Dato : 30-01-16 18:15

Jeg pyntede lige lidt på det og tog et par fejlmuligheder ud.
Mappen kunne jo være tom og så ville den prøve at kopiere ingenting og generere en fejl.
Eller en af mapperne kunne være slettet.
De ændringer jeg har lavet tager højde for det.

Et par ting der er værd at bemærke:
Scriptet tager senest ændrede fil, ikke senest oprettet.
Scriptet tager ikke højde for undermapper, det kigger kun i den mappe du har angivet.
Scriptet tager ikke højde for om det har skriverettighed på destinationen, hvis ikke smider det en fejl
Kode
Dim objFSO, colFiles, objFile, strSourceFolder, strDestFolder, objNewestFile
Set objFSO = CreateObject("Scripting.FileSystemObject")

'**************************************************
'**************************************************
strSourceFolder = "C:\test\" 'set sourcefolder here, local or UNC
strDestFolder = "\\NAS\backup\" 'set destinationfolder here, local or UNC
'**************************************************
'**************************************************

If Not objFSO.FolderExists(strSourceFolder) Then
Wscript.Echo "SourceFolder does not exist?" 'When done testing, coment out this line
WScript.Quit
End If

If Not objFSO.FolderExists(strDestFolder) Then
Wscript.Echo "Destination does not exist?" 'When done testing, coment out this line
WScript.Quit
End If

Set colFiles = objFSO.GetFolder(strSourceFolder)
If colFiles.Files.Count = 0 Then
WScript.Echo "No files in folder, nothing to do?" 'When done testing, coment out this line
WScript.Quit
End If

For Each objFile In colFiles.Files
If objNewestFile = "" Then
Set objNewestFile = objFile
Else
If objNewestFile.DateLastModified < objFile.DateLastModified Then
Set objNewestFile = objFile
End If
End If
Next

If Not objNewestFile Is Nothing Then
objFSO.CopyFile objNewestFile.Path,strDestFolder,True
End If


Kommentar
Fra : EXTERMINATOR


Dato : 30-01-16 18:52

ARRRRRGGHHHHHHHH jeg glemte at fjerne noget (det virker men dette er kønnere).

Kode
Dim objFSO, colFiles, objFile, strSourceFolder, strDestFolder, objNewestFile
Set objFSO = CreateObject("Scripting.FileSystemObject")

'**************************************************
'**************************************************
strSourceFolder = "C:\vbs\1\" 'set sourcefolder here, local or UNC
strDestFolder = "C:\vbs\2\" 'set destinationfolder here, local or UNC
'**************************************************
'**************************************************

If Not objFSO.FolderExists(strSourceFolder) Then
   WScript.Echo "SourceFolder does not exist?" 'When done testing, coment out this line
   WScript.Quit
End If

If Not objFSO.FolderExists(strDestFolder) Then
   WScript.Echo "Destination does not exist?" 'When done testing, coment out this line
   WScript.Quit
End If

Set colFiles = objFSO.GetFolder(strSourceFolder)
If colFiles.Files.Count = 0 Then
   WScript.Echo "No files in folder, nothing to do?" 'When done testing, coment out this line
   WScript.Quit
End If

For Each objFile In colFiles.Files
   If objNewestFile = "" Then
      Set objNewestFile = objFile
   Else
      If objNewestFile.DateLastModified < objFile.DateLastModified Then
         Set objNewestFile = objFile
      End If
   End If
Next

objFSO.CopyFile objNewestFile.Path,strDestFolder,True


Kommentar
Fra : EXTERMINATOR


Dato : 30-01-16 19:15

I tilfælde af at du hellere vil have sidst oprettet så har du her mulighed for at vælge

Kode
Dim objFSO, colFiles, objFile, strSourceFolder, strDestFolder, objNewestFile
Set objFSO = CreateObject("Scripting.FileSystemObject")

'***************************************************************************************
'***************************************************************************************
strSourceFolder = "C:\vbs\1\"    'set sourcefolder here, local or UNC
strDestFolder = "C:\vbs\2\"    'set destinationfolder here, local or UNC
'***************************************************************************************
'***************************************************************************************

If Not objFSO.FolderExists(strSourceFolder) Then
   WScript.Echo "SourceFolder does not exist?" 'When done testing, comment out this line
   WScript.Quit
End If

If Not objFSO.FolderExists(strDestFolder) Then
   WScript.Echo "Destination does not exist?" 'When done testing, comment out this line
   WScript.Quit
End If

Set colFiles = objFSO.GetFolder(strSourceFolder)
If colFiles.Files.Count = 0 Then
   WScript.Echo "No files in folder, nothing to do?" 'When done testing, comment out this line
   WScript.Quit
End If

For Each objFile In colFiles.Files
   If objNewestFile = "" Then
      Set objNewestFile = objFile
   Else
'*******************************************************************************************************************************
'only uncomment one of the lines ***********************************************************************************************
'      If objNewestFile.DateLastModified < objFile.DateLastModified Then   'gets last modified file
      If objNewestFile.DateCreated < objFile.DateCreated Then          'gets last created file
'*******************************************************************************************************************************
         Set objNewestFile = objFile
      End If
   End If
Next

objFSO.CopyFile objNewestFile.Path,strDestFolder,True


Kommentar
Fra : webnoob


Dato : 30-01-16 20:37

Jeg har måske ikke været præcis nok i min kræv.
Mappen jeg vil kopiere fra har IKKE nogen undermapper og får det ikke. Det er en mappe hvor TransportRule agent for anti-spam/mal-ware for Exchange 2013 smider sin log. Det er en ny fil pr. dag, som der skrives i hver gang der sendes eller modtages en mail. Den fil skal kopieres over på en share hvor jeg kan se den, den skal kopieres over flere gange om dagen, så derfor skal der kigges på om den ligger der forvejen, hvis den gør skal den slettes inden den kopieres.

Hvilket bringer mig til den næste ting, når filen er kopieret skal den merges/flettes sammen med en eksisterende fil, og faktisk her bør den blive slettet og ikke inden den kopieres.

Giver det mening.

Grunden til dette er at loggen importeres i Excel hvor der skal kunne spores evt. spam/malware der er sluppet igennem.

Kommentar
Fra : EXTERMINATOR


Dato : 30-01-16 22:03

Citat
Den fil skal kopieres over på en share hvor jeg kan se den, den skal kopieres over flere gange om dagen, så derfor skal der kigges på om den ligger der forvejen, hvis den gør skal den slettes inden den kopieres.

Scriptet kopierer nyeste over i destination, hvis den fil der er nyest findes i destination i forvejen overskrives eksisterende fil i destination.

Citat
Hvilket bringer mig til den næste ting, når filen er kopieret skal den merges/flettes sammen med en eksisterende fil, og faktisk her bør den blive slettet og ikke inden den kopieres.


Så det du ønsker er at den finder nyeste fil (ændringstidspunkt og ikke oprettelse), checker om den findes i destination, hvis den ikke findes kopieres filen, hvis den findes skal der flettes.

Er det nødvendigt med fletning, er det ikke nok bare at have nyeste version fra serveren?



Kommentar
Fra : webnoob


Dato : 31-01-16 09:32

Citat
Så det du ønsker er at den finder nyeste fil (ændringstidspunkt og ikke oprettelse), checker om den findes i destination, hvis den ikke findes kopieres filen, hvis den findes skal der flettes.

Er det nødvendigt med fletning, er det ikke nok bare at have nyeste version fra serveren?


Njar både og. Logfilerne som Exchange serveren generere hedder AgentLogÅÅÅÅMMDD-1.LOG og der bliver skrevet en ny en hver dag og hvis logfilen bliver for stor skifter tallet til sidst fra 1 til 2 osv. Og ja hvis den findes i destinations mappen skal den slettes inden den kopieres, når den er kopieret skal den flettes sammen med min fil så hedder Merged_AgentLogs.log. Grunden til at den skal flettes er at jeg har et Excel ark som jeg indlæser loggen i automatisk hver gang Excel arket åbnes og så nytter det ikke at logfilen ikke hedder det samme hver gang. Så forløbet vil jeg gerne have skal se sådan her ud.

1. Find nyeste fil i source mappen

2. Findes filen fra step 1 i destination mappen skal den slettes og kopieres fra source til destination, ellers bare kopieres fra source til destination.

3. Når den er kopieret skal den flettes sammen med Merged_AgentLogs.log og slettes i destination.




Kommentar
Fra : JegErHer


Dato : 31-01-16 10:47

Giver ikke mening, da 3. sletter i destination, vil 1. jo altid kopier over igen, hvor med det design duj vil ha, vil Merged_agentlogs.log jo bare vokse hvergang scriptet køres.

Plus Merged_agentlogs.log vil blive meget stor.

Næ det er Excel import som selv skal håndtere hvilke filer som skal importeres, for det er jo der du vælger hvad tidrum du vil ha overblik over.

Kommentar
Fra : webnoob


Dato : 31-01-16 10:59

Ja ved godt det ikke giver mening og slette source filen 2 gang og man kan sagtens fjerne det fra punkt 2.
Ja loggen vil blive ret stor, men jeg har et stort drev den ligger på og jeg vil tømme ud i den med jævne mellemrum.

Kommentar
Fra : EXTERMINATOR


Dato : 31-01-16 18:07

Der er nogle problemer med logiken.
lad os tage et eksempel:

Vi laver et script der kopierer og samler.
Vi sætter det til at køre hver 3. time, 0,3,6,9,12,15,18 og 21
klokken er nu 11:59 og sidste gang scriptet kørte var kl. 09:00
Lige præcis i dag bliver der sendt og modtaget særlig mange mails og kl.11:55 skiftede den til fil nummer 2 for idag.
Nu bliver klokken 12 og scriptet kører, det ser at nyeste fil er fil2 for i dag og den kopierer og samler.
Når du så åbner dit regneark mangler der 2 timer og 55 minutter (eller sagt på en anden måde, 30.000 mails), du ved det bare ikke


Hvis vi nu istedet for at tage seneste fil tager alle filer fra dags dato, og vi laver en lille logfil hvor vi skriver hvilken fil vi sidst tog og hvad linienummer i filen der var sidst......
Nahh dur ikke, der er vist et problem ved midnat når den skifter.

Den skal vist lige fintænkes, har vi nogen ide om størrelsen på logfilerne?


Kommentar
Fra : webnoob


Dato : 31-01-16 22:51

Der er sat nogen standard parameter for log filer, bl.a. størrelsen, den må max blive 10 MB. Resten kan jeg ikke huske, kigger i morgen. Er du utålmodig, så Google Agentlog for anti-malware Exchange 2013.

Kommentar
Fra : webnoob


Dato : 01-02-16 11:56

Der er ikke andre parameter på en at filen max må blive 10 MB stor og ligger i 7 dage.

Du har følgende muligheder
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
Søg
Reklame
Statistik
Spørgsmål : 177409
Tips : 31962
Nyheder : 719565
Indlæg : 6407779
Brugere : 218874

Månedens bedste
Årets bedste
Sidste års bedste