imrazor
Goto Top

Probleme mit Log-Datei und Frage zum Überschreiben von Dateien

1.) Log-Einträge werden nicht immer geschrieben
2.) Wie kann man vorhandene Dateien überschreiben?

Hallo Leute!

Ich muss euch wieder mal bemühen. Dieses mal habe ich zwei Fragen:

1) Ich schreibe in eine Log-Datei, bevor mein Skript eine Datei kopiert/verschiebt und wenn nochmal nach dem Vorgang:

Function Copy(Quellpfad, Zielpfad)

Set FSO = CreateObject("Scripting.FileSystemObject")  
Set Quelle = FSO.GetFolder(Quellpfad)
Set Ziel = FSO.GetFolder(Zielpfad)

For Each File in Quelle.Files

	'Log-Eintrag schreiben:  
	Bericht = "Protokoll " & File.Name & " wird von " & Quellpfad & " nach " & Zielpfad & " kopiert!"  
	Call Log(Logdatei, Bericht)

	FSO.CopyFile Quellpfad & "\*.*", Zielpfad & "\"  

	'Log-Eintrag schreiben:  
	Bericht = "Protokoll wurde von " & Quellpfad & " nach " & Zielpfad & " kopiert!"  
	Call Log(Logdatei, Bericht)
Next
	
End Function

Function Move(Quellpfad, Zielpfad)

Set FSO = CreateObject("Scripting.FileSystemObject")  
Set Quelle = FSO.GetFolder(Quellpfad)
Set Ziel = FSO.GetFolder(Zielpfad)

For Each File in Quelle.Files

	'Log-Eintrag schreiben:  
	Bericht = "Protokoll " & File.Name & " wird von " & Quellpfad & " nach " & Zielpfad & " verschoben!"  
	Call Log(Logdatei, Bericht)

	FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\"  

	'Log-Eintrag schreiben:  
	Bericht = "Protokoll wurde von " & Quellpfad & " nach " & Zielpfad & " verschoben!"  
	Call Log(Logdatei, Bericht)
Next

End Function

Und hier die Funktion zum Schreiben des Logs:

Function Log(Datei, LogTxt)

If LogAktiv=1 Then
	Set FSO = CreateObject("Scripting.FileSystemObject")  
	Set FileOut = FSO.OpenTextFile(Datei,8,True)

	FileOut.WriteLine (now())
	FileOut.WriteLine (LogTxt)
	FileOut.writeLine ("   ")  
	FileOut.Close

	Set FileOut = Nothing
End If

End Function 

Am Anfag meines eigentlichen Codes definiere ich den Pfad zur Logdatei und ob gelogged werden soll. Das funktioniert auch einwandfrei.

Mein Problem: Ich teste mit zwei Dateien, die kopiert/verschoben werden. Beim Kopieren werden die Log-Einträge für beide Dateien gesetzt, beim Verschieben nur für eine Datei. Woran kann dies liegen??

Hier mal ein Beispiel für nen Logeintrag:
15.02.2010 13:19:14
Protokoll PDFCreatorDoku.pdf wird von D:\PRINTTEST\TEMP2 nach D:\PRINTTEST\TEMP verschoben!
   
15.02.2010 13:19:17
Protokoll wurde von D:\PRINTTEST\TEMP2 nach D:\PRINTTEST\TEMP verschoben!
  
15.02.2010 13:19:37
Protokoll PDFCreatorDoku.pdf wird von D:\PRINTTEST\TEMP nach D:\PRINTTEST\TEMP5\2010-02-15 kopiert!
   
15.02.2010 13:19:40
Protokoll wurde von D:\PRINTTEST\TEMP nach D:\PRINTTEST\TEMP5\2010-02-15 kopiert!
   
15.02.2010 13:19:40
Protokoll Signatur_mit_Adobe8.pdf wird von D:\PRINTTEST\TEMP nach D:\PRINTTEST\TEMP5\2010-02-15 kopiert!
   
15.02.2010 13:19:43
Protokoll wurde von D:\PRINTTEST\TEMP nach D:\PRINTTEST\TEMP5\2010-02-15 kopiert!
   
15.02.2010 13:19:43
Protokoll PDFCreatorDoku.pdf wird von D:\PRINTTEST\TEMP nach D:\PRINTTEST\TEMP4\2010-02-15 verschoben!
   
15.02.2010 13:19:46
Protokoll wurde von D:\PRINTTEST\TEMP nach D:\PRINTTEST\TEMP4\2010-02-15 verschoben!


2.) Meine zweite Frage:

Wie kann ich eine bereits vorhandene (gleiche) Datei beim Kopieren/Verschieben überschreiben?

Ich dachte, dies ginge mit dem Parameter TRUE, bekommen dann aber einen Fehler.

FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\", TRUE  

Content-ID: 135962

Url: https://administrator.de/contentid/135962

Ausgedruckt am: 26.11.2024 um 04:11 Uhr

Biber
Biber 15.02.2010 um 13:53:48 Uhr
Goto Top
Moin IM Razor,

zu a) Für deine Log-Zeile ermittelst du den "richtigen" Text zwar dateiweise.
Die .MoveFile-Methode allerdings lässt du ja mit Wildcards (FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\" ) loslaufen.
D.h. it works as designed... - kein ungebührliches Verhalten des Schnipsels festzustellen.

zu b) Warum sollte MoveFile jetzt am Wochenende einen undokumentierten Parameter "ÜberschreibFallsVorhanden" dazubekommen haben?
Nur weil Valentinstag war?
--> Also, Vorhandensein "alteDatei" (im Zielverzeichnis) selber prüfen; ggf. vorher löschen.

Grüße
Biber
Imrazor
Imrazor 15.02.2010 um 14:06:26 Uhr
Goto Top
Hey Biber,

zu 1) dumme Frage: Und wieso funktioniert es dann bei der CopyFile-Methode??

Hier mache ich es ja genauso mit Wildcards:
FSO.CopyFile Quellpfad & "\*.*", Zielpfad & "\"   

zu 2) hmm, dachte es gibt für MobeFile ebenfalls diesen Parameter geben, wie bei CopyFile. Anscheinend ist dem nicht so.
bastla
bastla 15.02.2010 um 14:33:18 Uhr
Goto Top
Hallo lmrazor!
Und wieso funktioniert es dann bei der CopyFile-Methode??
Nach dem (ersten) Kopieren aller Dateien befinden sich wie viele Dateien im Quellpfad? Jedenfalls mehr als nach dem (ersten und einzigen) Verschieben aller Dateien ... face-wink

Anstelle von
FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\"
würde sich
File.Move Zielpfad & "\"
besser eignen (gilt analog auch für das Kopieren und die Methode "Copy") ...

Grüße
bastla
Imrazor
Imrazor 15.02.2010 um 15:22:35 Uhr
Goto Top
Super, danke bastla!

Da stand ich wohl ein bißchen auf der Leitung face-wink

Naja, jetzt muss ich nur noch was zusammenbasteln für die Prüfung, ob die Dateien schon vorhanden sind...
Imrazor
Imrazor 15.02.2010 um 16:14:18 Uhr
Goto Top
Für alle, die es interessiert, ich habe die Prüfung so gelöst:

Function Move(Quellpfad, Zielpfad)

Set FSO = CreateObject("Scripting.FileSystemObject")  
Set Quelle = FSO.GetFolder(Quellpfad)
Set Ziel = FSO.GetFolder(Zielpfad)

For Each File in Quelle.Files

	If FSO.fileExists(Zielpfad & "\" & File.Name) then  
	
	FSO.DeleteFile Zielpfad & "\" & File.Name  

	File.Move Zielpfad & "\"  

	Else

	File.Move Zielpfad & "\"  

	End If
Next
End Function
bastla
bastla 15.02.2010 um 17:31:47 Uhr
Goto Top
Hallo lmrazor!

Ließe sich noch etwas "eindampfen" face-wink:
Function Move(Quellpfad, Zielpfad)

Set FSO = CreateObject("Scripting.FileSystemObject")  
Set Quelle = FSO.GetFolder(Quellpfad)
Set Ziel = FSO.GetFolder(Zielpfad)

For Each File in Quelle.Files

	If FSO.fileExists(Zielpfad & "\" & File.Name) Then FSO.DeleteFile Zielpfad & "\" & File.Name  

	File.Move Zielpfad & "\"  

Next
End Function
Grüße
bastla