tommylik
Goto Top

VBS Ordner kopieren festhalten und zum löschen nutzen

Hallo,

Ich möchte von einem Lokalen Ordner alle Unterordner mit Dateien, die älter als eine Stunde sind auf ein Netzlaufwerk kopieren.
Beim Kopieren möchte ich das alle Ordner in eine Textdatei geschrieben werden.
Diese Datei soll dann zum Löschen der Ordner hergenommen werden.

Dim fso, folder, subfolder
Dim time

Set fso = CreateObject("Scripting.FileSystemObject")  
Set folder = fso.GetFolder("D:\Bosch\")  

time = 1 'Zeit in Stunden  

for each subfolder in folder.subfolders
	if (now()-subfolder.DateCreated)*24 > time Then
		subfolder.copy("\\Datensicherung\")  
	end if
next

Set fso = nothing

Warum ich das so möchte ist, weil ich nicht mit Move arbeiten kann da das Ziel ein Netzlaufwerk ist.
Und die Textdatei soll als Sicherheit dienen das nur das gelöscht wird, was schon kopiert wurde.

Ich habe das ganze schon mit Robocopy ausprobiert aber Robocopy unterstützt keine Stunden nur Tage.

Kann mir einer von Euch helfen und sagen, wie beim Kopieren der Ordner gleichzeitig die Ordnernamen in eine Datei geschrieben werden können?
Und dann beim Löschen wieder einlesen.

Vielen Dank

Grüße Tommylik

Content-ID: 1096843683

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

Ausgedruckt am: 17.11.2024 um 11:11 Uhr

PeterGyger
PeterGyger 29.07.2021 um 12:27:25 Uhr
Goto Top
Hallo Tommylik

Verstehe ich Deine Absicht richtig?

  • NTFS Baumstruktur - aktuelles Verzeichnis
  • Prüfe ob Dateien mit Timestamp "Zeit - 1h" vorhanden
  • Diese mit der Baumstruktur auf ein NW-Laufwerk kopieren
  • Kopierte Dateien loggen (Textfile)
  • "Ordner" (!) der kopierten Dateien anhand des Logs löschen

"Warum ich das so möchte ist, weil ich nicht mit Move arbeiten kann da das Ziel ein Netzlaufwerk ist."  

Anmerkung1:
Ist Deine Aussage die, dass "move" nicht mit der UNC Notation umgehen kann? Wenn ja, ist das falsch.

Anmerkung2:
"move" nimmt man nicht zum kopieren. Wie kommst du auf "move"?
docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/move-method-filesystemobject-object

Anmerkung3:
Dein Beispiel arbeitet mit dem FSO von WSH. D.h. Du musst nur die aktuelle Zeit mit dem Timestamp der gefundenen Dateien in den Unterverzeichnissen auf die Differenz grösser 60 Min prüfen. Versuch macht klug
www.script-example.com/themen/vbscript-Datum-und-Zeit-Funktionen-Syntax-Reference.php

Grüsse
Tommylik
Tommylik 29.07.2021 um 13:45:47 Uhr
Goto Top
Hallo PeterGyger,

Vielen Dank für deine Antwort.


  • NTFS Baumstruktur - aktuelles Verzeichnis
Ja - D:\Bosch\... die Unterordner von D:\Bosch\ sollen kopiert werden (natürlich mit Dateien)

  • Prüfe ob Dateien mit Timestamp "Zeit - 1h" vorhanden
Prüfe die Unterordner älter als 1h

  • Diese mit der Baumstruktur auf ein NW-Laufwerk kopieren
Nur alle Unterordner von D:\Bosch\... auf das NW-Laufwerk "\\Datensicherung\" kopieren

  • Kopierte Dateien loggen (Textfile)
Alle Unterordner die kopiert wurden in das Textfile schreiben.

  • "Ordner" (!) der kopierten Dateien anhand des Logs löschen
Anhand des Textfile die Unterordner löschen.

Ich kann das Netzlaufwerk über die UNC Notation ansprechen oder gemappt Z:\...

Aber wenn ich Move benutze bekomme ich den Fehler "Zugriff verweigert"
Copy funktioniert.


>Anmerkung3:
Dein Beispiel arbeitet mit dem FSO von WSH. D.h.
Du musst nur die aktuelle Zeit mit dem Timestamp der gefundenen Dateien in
den Unterverzeichnissen auf die Differenz grösser 60 Min prüfen. Versuch macht klug


Das habe ich schon und funktioniert.
if (now()-subfolder.DateCreated)*24 > time Then

Was ich nicht hinbekomme ist die kopierten Ordner in das Textfile zuschreiben
und dann mit dem Textfile die Ordner zu löschen.

Das erstellen und öffnen habe ich schon herausgefunden.

Set MyFile = FSO.CreateTextFile("D:\Log\copydel.txt ", TRUE)
MyFile.Close

Set MyFile = FSO.OpenTextFile("D:\Log\copydel.txt", 8)

Mit MyFile.WriteLine kann ich in die datei schreiben aber wie vom copy befehl aus???

Vielen Dank nochmal für deine Antwort.

Grüße Tommylik
PeterGyger
PeterGyger 29.07.2021 um 14:11:51 Uhr
Goto Top
Hallo Tommylik

IMO:
Falscher Ansatz. Du musst nicht vom "copy" befehl aus in die Datei schreiben.
Du musst lediglich den Namen des Objekt "Subfolder" im gleichen Durchgang in eine Datei schreiben.

Wenn in Deinem Problem "Copy" mit UNC funktioniert, aber "Move" nicht und es ist kein Berechtigungsproblem ("Write Access"), dann kopierst Du nur. Du willst ja ohnehin abschliessend alle (!!) Unterverzeichnisse löschen, wo eine Datei mit Deinen Kriterien gefunden wurde. Das Resultat ist identisch..

Grüsse
Peter
Tommylik
Tommylik 30.07.2021 um 05:43:11 Uhr
Goto Top
Hallo Peter,

Vielen Dank für deine Antwort und Hinweis ich werde mal schauen was ich rausfinden kann.

Ob UNC oder gemappt Copy funktioniert. Move funktioniert nicht weil es den Zugriff verweigert. Habe ich oben schon erwähnt.

Also vielen Dank nochmal für die Hilfe.

Grüße Tommylik