Brrr, da^ kommt einer mit 'nem richtigen Betriebssystem um die Ecke...
Unter Windows:
Zitat von
Saiyajin
eigentlich stell ich mir die Frage schon oft, wie kann ich mehrere Ordner (ca. 450 Stück nach "Erstelldatum" bzw "Zeit der Erstellung" sortieren).
Das Problem hierbei ist, dass ich die Ordner wegen Sicherung auf ein USB Stick kopiert habe und danach wieder zurück auf die Festplatte.
Leider wurden so die Attribute "Erstelldatum" auf das Kopierdatum geändert, also alle 450 Ordner haben nun das selbe Datum.
Das Änderungsdatum zum sortieren kann ich ebenfalls nicht anklicken, da ich in den Ordnern auch ab und zu was geändert habe.
Dafür hättest du wohl ein geeignetes Kopier-Tool verwenden müssen, z.B. unter Windows das (in der Konsole zu verwendende) Bordwerkzeug Robocopy (Robust File Copy for Windows), Hilfe aufrufbar per: robocopy /?
Das Tool behält glücklicherweise in der Standardeinstellung Attribute und Zeitstempel bei, den Rest aber nicht. Der Parameter lautet im Maximalausbau (was du nicht willst, lässt du weg, DAT wird standardmäßig verwendet, wofür du den ganzen Parameter weglassen könntest):
/COPY:DATSOU (dasselbe wie /COPYALL)
D für Data (Daten)
A für Attributes (Dateiattribute: Versteckte Datei, Systemdatei, Schreibgeschützte Datei etc.)
T für Timestamps (Zeitstempel)
S für Security (NTFS ACLs (Berechtigungen))
O für Owner (Besitzer)
U für Auditing (Überwachung)
Unter FAT(32) geht natürlich einiges verloren, weil es dort keine Berechtigungen auf Dateisystemebene gibt und Auditing auch nicht. Mitunter ist das sogar von praktischem Nutzen, wenn man die alten Berechtigungen loswerden und die des Zielverzeichnisses erben will.
Die Ordner habe ich immer nur nach Datum genannt und die Reihenfolge sieht z.B. aktuell so aus:
17.02.2016
23.04.2017
14.02.2016
14.04.2018
14.05.2018
16.05.2018
26.10.2017
usw....
Frage ist.. gibt es überhaupt noch eine Möglichkeit die Ordner nach "Erstelldatum" zu sortieren oder sind diese Attribute durch das Kopieren "zerstört" wurden ?
Die alten Zeitstempel für das Erstelldatum sind erst gar nicht geschrieben worden, sondern die neuen.
Falls du die Ordner wirklich nach Erstelldatum benannt hast, wie wäre es dann, wenn du dein Benennungsschema nach YYYY.MM.DD umstellst? So mache ich das seit gefühlten Ewigkeiten und habe seitdem weniger Stress (Sortierung nach Name genügt, was auch beim dir-Befehl hilft, z.B. wenn du das Konvertieren von Dateien automatisieren willst). Wenn man sich einmal daran gewöhnt hat, ist es gar nicht mehr schwer.
450-mal das Schema von DD.MM.YYYY nach YYYY.MM.DD umzustellen, wäre natürlich mühsam. Dafür habe ich dieses Skript (Visual Basic Script) erstellt:
Code:
option explicit
const pattern = "^([0-9]{2})\.([0-9]{2})\.([0-9]{4})$"
'const pattern = "^([0-9]{4})\.([0-9]{2})\.([0-9]{2})$"
dim scrShell
set scrShell = CreateObject("WScript.Shell")
if (not scrShell is nothing) then
dim objShell
set objShell = CreateObject("Shell.Application")
if (not objShell is nothing) then
dim objFolder
set objFolder = objShell.NameSpace(scrShell.CurrentDirectory)
if (not objFolder is nothing) then
dim re
set re = new RegExp
re.Pattern = pattern
re.IgnoreCase = false
re.Global = false
dim objFolderItems
set objFolderItems = objFolder.Items()
if (not objFolderItems is nothing) then
dim item
for each item in objFolderItems
if item.IsFolder then
dim strFolderName
strFolderName = item.Name
if re.Test(strFolderName) then
item.Name = re.Replace(strFolderName,"$3.$2.$1")
end if
end if
next
end if
end if
end if
end if
Das^ als Textdatei speichern, die mit der Dateinamenserweiterung vbs versehen und in das Verzeichnis, welches die umzubennenenden Ordner enthält, verschieben und ausführen. Die Rolle rückwärts ist auch möglich, dazu einfach anstelle der dritten Zeile die zweite auskommentieren (mit vorangestelltem '). Das könntest du auch in jeder Version einmal speichern.
Ich hab schon Tools gefunden womit ich die Attribute ändern kann, aber dazu müsste ich dann jeden einzelnen Ordner anfassen... das ist ja nicht nur bei den 450 Ordnern so, sondern auch noch bei anderen Sachen.
AFAIK geht das unter Windows nur mit Windows-Programmierung oder mit PowerShell, wenn nicht je Ordner die Uhr umgestellt werden soll (was u.U. unangenehme Nebeneffekte verursachen kann).
Deswegen habe ich für die Anpassung der Zeitstempel des jeweiligen Erstelldatums an die Verzeichnisnamen (ist jetzt die einzige verbliebene Information) nun auf Powershell gewechselt, damit ebenso wie im letzten Beispiel verfahren, jedoch anstelle von .vbs bitte .ps anhängen, dann Kontextmenü (Rechtsklick) -> Mit Powershell ausführen:
Code:
$patternA = '^([0-9]{2})\.([0-9]{2})\.([0-9]{4})$'
$patternB = '^([0-9]{4})\.([0-9]{2})\.([0-9]{2})$'
$replStrA = '$3.$2.$1 00:00:00'
$replStrB = '$1.$2.$3 00:00:00'
$folders = Get-ChildItem -force | Where-Object {$_.PSIsContainer}
foreach($object in $folders) {
$name = $object.Name
if ($name -match $patternA) {
$name = $name -replace $patternA, $replStrA
Write-Host $name
$object.CreationTime=($name)
}
elseif ($name -match $patternB) {
$name = $name -replace $patternB, $replStrB
Write-Host $name
$object.CreationTime=($name)
}
}
read-host
Das ändert das Erstelldatum der Verzeichnisse nach ihren Namen. Dabei ist beides möglich, DD.MM.YYYY wie auch YYYY.MM.DD, ohne dafür Änderungen vorzunehmen. Der Spaß ginge auch etwas einfacher, ist so aber universeller verwendbar und leichter anpassbar.
Allerdings muss aus Sicherheitsgründen standardmäßig erst das Ausführen von PowerShell-Scripten erlaubt werden. Dazu...
- eine Powershell-Konsole als Administrator öffnen und dieses eingeben (solches mit Enter bestätigen):
Get-ExecutionPolicy
Den Wert merken oder aufschreiben, sollte normalerweise Restricted sein (keine Konfigurationsdaten laden, keine PowerShell-Skripte ausführen). - diese Richtlinie du auf RemoteSigned (aus dem Internet heruntergeladene Skripte und Konfigurationsdateien müssen von einem vertrauenswürdigen Herausgeber signiert sein, andere nicht (und es ist nicht immer feststellbar, ob sie aus dem Internet heruntergeladen wurden, also Vorsicht bei Skripten, von denen du nicht weißt, was sie tun!)) ändern, per:
Set-ExecutionPolicy RemoteSigned
Danach solltest du das Powershell-Skript per Rechtsklick -> Mit Powershell ausführen, starten können.
Falls du Powershell-Skripte wieder verbieten willst, gibst du dieses (wiederum als Administrator) ein:
- Set-ExecutionPolicy Restricted
Oder anstelle von Restricted den vorgemerkten Wert einsetzen (s.o.), aber bei Abweichung normalerweise nur bei Vorliegen eines guten Grundes!
Zum Ausführen der beiden Skripte sind normalerweise keine Administratorrechte nötig, und man sollte vorsichtshalber auch besser keine verwenden. Standardmäßig wird im aktuellen Arbeitsverzeichnis manipuliert, das also nicht irgendwie umbiegen, es sei denn, du änderst das absichtlich auf das mit den zu manipulierenden Daten.
Bei Fragen einfach fragen...
Die Skripte sind kaum getestet. Dafür und auch für alle anderen Hinweise gilt: Nutzung auf eigene Gefahr!