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-Key: 135962

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: Biber
Biber Feb 15, 2010 at 12:53:48 (UTC)
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
Member: Imrazor
Imrazor Feb 15, 2010 at 13:06:26 (UTC)
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.
Member: bastla
bastla Feb 15, 2010 at 13:33:18 (UTC)
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
Member: Imrazor
Imrazor Feb 15, 2010 at 14:22:35 (UTC)
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...
Member: Imrazor
Imrazor Feb 15, 2010 at 15:14:18 (UTC)
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
Member: bastla
bastla Feb 15, 2010 at 16:31:47 (UTC)
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