alte Dateien per Batch verschieben aber relative Struktur beibehalten
OS: Windows Server 2003
Struktur:
C:\Quelle\Dateien
C:\Quelle\XYZ\Dateien
C:\Quelle\ABC\Dateien
C:\Ziel\Dateien
C:\ZIEL\XYZ\Dateien
C:\ZIEL\ABC\Dateien
Hallo zusammen,
habe ein Problem mit einer Batchdatei.
Es sollen in einem Verzeichnis rekursiv die Dateien geprüft werden, ob sie älter als beispielsweise 35 Tage sind.
Ist das der Fall, sollen sie in ein Zielverzeichnis inklusive der relativen Ordnerstruktur verschoben werden. Wie oben dargestellt also von
C:\Quelle\Dateien
und
C:\Quelle\relativeStruktur\Dateien
nach
C:\Ziel\Dateien
und
C:\Ziel\relativeStruktur\Dateien
Ich bastel schon die ganze Zeit mit forfiles.exe herum, aber er kopiert mir alle Dateien nur in C:\Ziel\ ohne die relative Ordnerstruktur zu behalten.
Wären es nur bestimmte Unterordner könnte ich diese einzeln abarbeiten lassen, aber es können auch immer neue Ordner im Quellverzeichnis entstehen und diese sollen auch berücksichtigt werden.
Hat vielleicht jemand einen Tipp oder gar eine Lösung parat?
Danke im Voraus.
MfG
Hans
Struktur:
C:\Quelle\Dateien
C:\Quelle\XYZ\Dateien
C:\Quelle\ABC\Dateien
C:\Ziel\Dateien
C:\ZIEL\XYZ\Dateien
C:\ZIEL\ABC\Dateien
Hallo zusammen,
habe ein Problem mit einer Batchdatei.
Es sollen in einem Verzeichnis rekursiv die Dateien geprüft werden, ob sie älter als beispielsweise 35 Tage sind.
Ist das der Fall, sollen sie in ein Zielverzeichnis inklusive der relativen Ordnerstruktur verschoben werden. Wie oben dargestellt also von
C:\Quelle\Dateien
und
C:\Quelle\relativeStruktur\Dateien
nach
C:\Ziel\Dateien
und
C:\Ziel\relativeStruktur\Dateien
Ich bastel schon die ganze Zeit mit forfiles.exe herum, aber er kopiert mir alle Dateien nur in C:\Ziel\ ohne die relative Ordnerstruktur zu behalten.
Wären es nur bestimmte Unterordner könnte ich diese einzeln abarbeiten lassen, aber es können auch immer neue Ordner im Quellverzeichnis entstehen und diese sollen auch berücksichtigt werden.
Hat vielleicht jemand einen Tipp oder gar eine Lösung parat?
Danke im Voraus.
MfG
Hans
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 127997
Url: https://administrator.de/forum/alte-dateien-per-batch-verschieben-aber-relative-struktur-beibehalten-127997.html
Ausgedruckt am: 20.04.2025 um 05:04 Uhr
8 Kommentare
Neuester Kommentar

Hallo Hans,
das Tool delage32 von Horst Schaeffer kann das in einem Rutsch erledigen.
wenn die Ausgabe deinen Anforderunge entspricht, kannst du /preview entfernen.
Gruß
LotPings
das Tool delage32 von Horst Schaeffer kann das in einem Rutsch erledigen.
Pushd C:\Quelle
delage32 * 35 /recurse /move c:\Ziel /preview
Popd
wenn die Ausgabe deinen Anforderunge entspricht, kannst du /preview entfernen.
Gruß
LotPings

Zitat von @ceng.de:
Hat jemand noch eine Idee, wie ich einen Link der verschobenen Datei auf die neue Datei im Zielverzeichnis erzeuge?
Hat jemand noch eine Idee, wie ich einen Link der verschobenen Datei auf die neue Datei im Zielverzeichnis erzeuge?
Hallo ceng.de,
willkommen im Forum.
Ich kann da jetzt keinen Bezug zur eigentlichen Frage erkennen,
wie wärs wenn du eine eigene Frage mit deinem Kontext aufmachst?
Dann haben auch weitaus mehr Leute die Möglichkeit dein neues Poblem anzusehen / eine Lösung anzubieten.
Für das Erstellen von Links brauchst du ein 3rdParty Tool oder vbscript.
Gruß
LotPings
Ich hänge gerade daran:
- wie ich im Unterverzeichnis die gleiche Ordnerstruktur erstelle wie im Originalverzeichnis...
- ob das Logdatei-Object nicht vollaufen kann, wenn viele tausend Dateien verschoben werden
- ob das Script nicht an einer oder anderer Stelle optimiert werden kann
Ideen?
Danke
CENG
SCRIPT V2 Stand 26.07.2010
- wie ich im Unterverzeichnis die gleiche Ordnerstruktur erstelle wie im Originalverzeichnis...
- ob das Logdatei-Object nicht vollaufen kann, wenn viele tausend Dateien verschoben werden
- ob das Script nicht an einer oder anderer Stelle optimiert werden kann
Ideen?
Danke
CENG
SCRIPT V2 Stand 26.07.2010
' [content:147586#580079]
' Script zum Verschieben von "alten" Dateien in ein anderes Verzeichnis und Link im Originalverzeichnis erstellen
' THX Tsuki ([content:79798])
' THX Friemler ([content:91808])
Dim OrgPfad, ArcPfad, Logdatei
Dim Logbucheintrag, Logbuchkopf, trennlinie
Dim DatName, LinkPfad
Dim ObjShell
Dim objShortcut
'Angabe mit Backslash "\" -> Bsp: c:\programme\
OrgPfad = "C:\ArchivTest\OrigDat\"
ArcPfad = "C:\ArchivTest\ArcDat\"
logdatei = "C:\ArchivTest\archivierung-"&Date()&".txt"
trennlinie = "*****************************************"
'Subroutine Ordner ArcPfad vorhanden
Archivordnerpruefung
set fs = createobject("Scripting.FileSystemObject")
ListOrdner (OrgPfad)
'''''''''''''''''''''''''''''''''''''''''''''''''''
' Logfile Bearbeitung '
'''''''''''''''''''''''''''''''''''''''''''''''''''
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Logeintrag schreiben
Const ForReading = 1
Const ForWriting = 2
'Prüfung, ob Logdatei vorhanden, ansonsten erstelle mit Datum in Kopfzeile
If (objFSO.FileExists(logdatei)) Then
Set open_File = objFSO.OpenTextFile(logdatei, 8)
open_File.Close()
Else
Set open_File = objFSO.OpenTextFile(logdatei, 2, "True")
open_File.Close()
End If
Set objLogFile = objFSO.OpenTextFile(Logdatei, ForWriting, TRUE)
Logbuchkopf = trennlinie & vbCrLf _
& "Datum der Archivierung: " & Date() & vbCrLf _
& trennlinie & vbCrLf
objLogFile.Write Logbuchkopf & Logbucheintrag
' Schliesse Logdatei
objLogFile.Close
'''''''''''''''''''''''''''''''''''''''''''''''''''
'' Verschieben der Dateien ''
'''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ListOrdner(OrgPfad)
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ordner = fs.getfolder(OrgPfad)
For Each file In ordner.files
OrgPfad = File.path
temp = Split(OrgPfad , "\")
DatName = temp(Ubound(temp))
Wscript.echo "Datei in Bearbeitung: " & DatName
Logbucheintrag = Logbucheintrag & vbCrLf & Time () & " " & OrgPfad
' Dateien tatsächlich verschieben
LinkPfad = OrgPfad
FS.MoveFile OrgPfad , ArcPfad
'Subroutine Link für verschobene Datei anlegen
LinkAnlegen
Next
' Suche der Dateien in Unterordner
For Each Unterordner In Ordner.subfolders
OrgPfad = unterordner.path
Wscript.echo "Unterpfad existiert: "
Wscript.echo "Pfad: " & OrgPfad
' Lese auch in Unterordnerstruktur
Listordner unterordner
Next
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''
'' Prüfung ob Archivordner vorhanden ''
'''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Archivordnerpruefung()
Dim Ordner
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FolderExists(ArcPfad) Then
fs.CreateFolder (ArcPfad)
Else
'nix machen
End If
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''
'' für jede verschoben Datei link anlegen ''
'''''''''''''''''''''''''''''''''''''''''''''''''''
Sub LinkAnlegen()
Set ObjShell = CreateObject("WScript.Shell")
strLPfad = LinkPfad
Set objShortcut=objShell.CreateShortcut(strLPfad & ".lnk")
objShortcut.TargetPath= ArcPfad & DatName
objShortcut.Save
End Sub

Ja,
auch wenn ich mich wiederhole,
mache bitte einen neuen Frage-Beitrag auf - nicht anhängen.
gruß
LotPings
auch wenn ich mich wiederhole,
mache bitte einen neuen Frage-Beitrag auf - nicht anhängen.
gruß
LotPings