hansg
Goto Top

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

Content-Key: 127997

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

Printed on: April 16, 2024 at 18:04 o'clock

Member: TsukiSan
TsukiSan Oct 27, 2009 at 10:34:37 (UTC)
Goto Top
Hallo HansG,

wie wär's auf der Basis von VBS?
DateiOrig = "C:\Quelle\Dateien\Test.txt"  
DateiNeu = "C:\Ziel\Dateien\Test.txt  

Set CPYFSO = CreateObject("Scripting.FileSystemObject")  

CPYFSO.CopyFile DateiOrig , DateiNeu , True
?
Das ist das Grundgerüst! Man kann das verfeinern/anpassen.

Gruß
Tsuki
Mitglied: 77559
77559 Oct 27, 2009 at 10:47:20 (UTC)
Goto Top
Hallo Hans,

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
Member: bennib22
bennib22 Oct 27, 2009 at 11:53:47 (UTC)
Goto Top
Hallo,

Machs doch ganz dumm!
Kopiere alle Dateien mit copy bzw xcopy
und lösch danach die anderen Dateien mit del *.*

Gruß
bennib22
Member: HansG
HansG Oct 27, 2009 at 13:18:18 (UTC)
Goto Top
Zitat von @77559:
Hallo Hans,

das Tool [http://home.mnet-online.de/horst.muc/wbat32d.htm 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

Vielen Dank.

Das Tool hat mir sehr geholfen!
Member: ceng.de
ceng.de Jul 24, 2010 at 17:49:15 (UTC)
Goto Top
Hat jemand noch eine Idee, wie ich einen Link der verschobenen Datei auf die neue Datei im Zielverzeichnis erzeuge?
Mitglied: 77559
77559 Jul 26, 2010 at 16:48:34 (UTC)
Goto Top
Zitat von @ceng.de:
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
Member: ceng.de
ceng.de Jul 26, 2010, updated at Oct 18, 2012 at 16:42:57 (UTC)
Goto Top
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

' [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
Mitglied: 77559
77559 Jul 27, 2010 at 16:55:02 (UTC)
Goto Top
Zitat von @ceng.de:
Ideen?

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

gruß
LotPings