Ein gewisser just me war so freundlich ein nützliches Script aus dem alten Forum zu renovieren und es hier viewtopic.php?f=10&t=115354 einzustellen. Nach dem Kopieren sind leider die Änderungsdaten der Ordner auf das Kopierdatum kopiert.
Da ich mich gerne an dem Ordneränderungsdatum orientiere, habe ich folgendes Script erstellt. Das Script durchsucht alle Ordner rekursiv nach Elementen und setzt das Änderungsdatum der Ordner auf das neueste Änderungsdatum der enthaltenen Dateien. Das zurückgegebene Objekt ist nur für die Statistik.
Das Script und benötigte Funktionen:
Code: Select all
func_ordnerdatum(ordner = "")
{
O := {} ; ein Objekt sammelt die Anzahl von Dateien im Ordner
loop, Files, % ordner "\*.*", DFR
{
if !(InStr(A_LoopFileAttrib, "D")) ; kein Ordner
{
O["Ordnerz", A_LoopFileDir] := O["Ordnerz", A_LoopFileDir] ? O["Ordnerz", A_LoopFileDir] + 1 : 1 ; erhöht den Zähler im Objekt wenn Datei
if (O["Ordnerz", A_LoopFileDir] = 1 or (A_LoopFileTimeModified > FileGetTime(A_LoopFileDir, "M"))) ; wenn erste Datei or Dateidatum neuer als Ordnerdatum
{
FileSetTime(A_LoopFileTimeModified, A_LoopFileDir, "M", 2) ; übernimmt erste Datei-Datum für Ordner
O["Ordnert", A_LoopFileDir] := A_LoopFileTimeModified
}
}
}
return, O ; Objekt zurück
}
; --------------------Befehle als Funktion------------------------------------
FileSelectFolder(StartingFolder="", Options="", Prompt="")
{
FileSelectFolder, out, %StartingFolder%, %Options%, %Prompt%
Return out
}
FileGetAttrib(Filename="")
{
FileGetAttrib, out, %Filename%
Return out
}
FileGetTime(Filename="", WhichTime="")
{
FileGetTime, out, %Filename%, %WhichTime%
Return out
}
FileSetTime(YYYYMMDDHH24MISS="", FilePattern="", WhichTime="", OperateOnFolders="", Recurse="")
{
try
FileSetTime, %YYYYMMDDHH24MISS%, %FilePattern%, %WhichTime%, %OperateOnFolders%, %Recurse%
catch e
Return e.Message
Return 0
}
Beispielscript:
Code: Select all
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; --------------------------------------------------------
ordner := FileSelectFolder(A_MyDocuments, "", "Bitte Ordner wählen")
if !ordner ; nichts übergeben?
ExitApp
O := func_ordnerdatum(Ordner)
MsgBox, % O.Ordnerz.Count() " Ordner angepasst"
Show_Obj(O) ; liefert alle Elemente des Objektes
ExitApp
; --------------------------------------------------------
func_ordnerdatum(ordner = "")
{
O := {} ; ein Objekt sammelt die Anzahl von Dateien im Ordner
loop, Files, % ordner "\*.*", DFR
{
if !(InStr(A_LoopFileAttrib, "D")) ; kein Ordner
{
O["Ordnerz", A_LoopFileDir] := O["Ordnerz", A_LoopFileDir] ? O["Ordnerz", A_LoopFileDir] + 1 : 1 ; erhöht den Zähler im Objekt wenn Datei
if (O["Ordnerz", A_LoopFileDir] = 1 or (A_LoopFileTimeModified > FileGetTime(A_LoopFileDir, "M"))) ; wenn erste Datei or Dateidatum neuer als Ordnerdatum
{
FileSetTime(A_LoopFileTimeModified, A_LoopFileDir, "M", 2) ; übernimmt erste Datei-Datum für Ordner
O["Ordnert", A_LoopFileDir] := A_LoopFileTimeModified
}
}
}
return, O ; Objekt zurück
}
; --------------------Befehle als Funktion------------------------------------
FileSelectFolder(StartingFolder="", Options="", Prompt="")
{
FileSelectFolder, out, %StartingFolder%, %Options%, %Prompt%
Return out
}
FileGetAttrib(Filename="")
{
FileGetAttrib, out, %Filename%
Return out
}
FileGetTime(Filename="", WhichTime="")
{
FileGetTime, out, %Filename%, %WhichTime%
Return out
}
FileSetTime(YYYYMMDDHH24MISS="", FilePattern="", WhichTime="", OperateOnFolders="", Recurse="")
{
try
FileSetTime, %YYYYMMDDHH24MISS%, %FilePattern%, %WhichTime%, %OperateOnFolders%, %Recurse%
catch e
Return e.Message
Return 0
}
; --------------------------------------------------------
Show_Obj(a, warte = 1)
{
Static edit := ""
r := List_Obj(a)
Gui, install:new, +HwndEigenesGuiHwnd
gui, add, Edit, % "w" A_ScreenWidth / 10 * 8 " R40 -Wrap vedit",
gui, Show, , Show_Obj - %EigenesGuiHwnd%
GuiControl, , edit, %r%
if warte
loop
{
Sleep, 500
if % !WinExist("ahk_id " EigenesGuiHwnd)
Break
}
return EigenesGuiHwnd
}
;---Funktion List_Obj by Bentschi; Modifiziert by MEC---------------------
List_Obj(a)
{
if (isobject(a))
{
for k, v in a
{
r .= ((r) ? "`r`n" : "") "[" k "]"
if (isobject(v)) {
r .= regexreplace("`t" func(A_ThisFunc).(v), "`r`n", "`r`n...`t")
} else
r .= "`t= >" v "<"
}
return r
}
return "Fehler: Es wurde kein Object übergeben"
}