BATCH - Attribute ändern für Dateien eines bestimmten Alters
Hallo liebe Leute,
Ich habe folgendes Problem und komme nicht weiter:
Auf einem Server liegt der Ordner "Test" in diesem mehrere Unterordner, z.B. "1" "2" "3" usw., in diesen ebenfalls ein paar Ordner und in diesen Dateien wie doc, docx, txt usw.
Jetzt ist gewünscht das alle Dateien die ein Alter von 30 Tagen erreichen automatisch das Attribut schreibgeschützt und eventuell noch systemdatei bekommen, alle Dateien jünger als 30 Tage sollen jedoch davon nicht betroffen werden.
Mein Ansatz bisher wäre:
FORFILES /P C:\Test /S /M *.* /D -30
dann
attrib +r C:\Test\*.* /S
nur schaffe ich es nicht diese CMDs zusammen zu bringen, vielleicht schon Tunnelblick ;)
FORFILES /P C:\Test /S /M *.* /D -30 /C "%comspec% attrib +r C:\Test\*.*"
Ich suche praktisch eine Lösung das der attrib nur auf die Dateien angewendet wird die mit FORFILES definiert werden, ob in der CMD oder PS ist egal, ist ein Server 2016
Vielen lieben Dank, für Hilfe wäre ich euch sehr verbunden.
Ich habe folgendes Problem und komme nicht weiter:
Auf einem Server liegt der Ordner "Test" in diesem mehrere Unterordner, z.B. "1" "2" "3" usw., in diesen ebenfalls ein paar Ordner und in diesen Dateien wie doc, docx, txt usw.
Jetzt ist gewünscht das alle Dateien die ein Alter von 30 Tagen erreichen automatisch das Attribut schreibgeschützt und eventuell noch systemdatei bekommen, alle Dateien jünger als 30 Tage sollen jedoch davon nicht betroffen werden.
Mein Ansatz bisher wäre:
FORFILES /P C:\Test /S /M *.* /D -30
dann
attrib +r C:\Test\*.* /S
nur schaffe ich es nicht diese CMDs zusammen zu bringen, vielleicht schon Tunnelblick ;)
FORFILES /P C:\Test /S /M *.* /D -30 /C "%comspec% attrib +r C:\Test\*.*"
Ich suche praktisch eine Lösung das der attrib nur auf die Dateien angewendet wird die mit FORFILES definiert werden, ob in der CMD oder PS ist egal, ist ein Server 2016
Vielen lieben Dank, für Hilfe wäre ich euch sehr verbunden.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 395975
Url: https://administrator.de/contentid/395975
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
15 Kommentare
Neuester Kommentar
Schneller Powershell Einzeiler:
Zur Info: Das Skript gibt nichts in der Konsole aus, es verarbeitet lediglich die passenden Dateien.
Gruß A.
gci 'C:\test' -file -recurse | ?{!($_.Attributes -band [System.IO.FileAttributes]::ReadOnly) -and $_.LastWriteTime -lt (get-date).AddDays(-30)} | %{[System.IO.File]::SetAttributes($_.FullName,'ReadOnly,System')}
Gruß A.
p.s. Billy ist nicht mein Vorname .
Ja.
forfiles /M *.* /P C:\test /S /D -30 /c "cmd /c attrib +r +s @path"
s.o.
Zitat von @falkstephan:
Eine letzte Frage, wie muss ich es abändern das er sich nicht am letzten Dateizugriff
Du meinst letzte Änderung! Dateizugriff wäre $_.LastAccessTimeEine letzte Frage, wie muss ich es abändern das er sich nicht am letzten Dateizugriff
sondern am Erstelldatum orientiert? Nach dem ändern von $_.LastWriteTime zu $_.CreationTime funktioniert das Skript nicht mehr
Doch geht hier auch damit einwandfrei! Bedenke das das Skript nur Dateien verarbeitet die das Readonly Flag noch nicht haben, damit nicht jede Datei die schon readonly ist, erneut angefasst werden muss ...Das Erstelldatum muss natürlich älter als 30 Tage sein! Der Fehler liegt also auf deiner Seite.
Nö, solange du dieses Datum für den Vergleich heranziehen willst ist das deine Entscheidung für den Zweck deiner Anwendung die hier keiner kennt.
Bedenke aber das dich Readonly-Flags nicht vor böswilligen Veränderungen wie Ransomware &Co und Usern die Schreibzugriff auf die Ordner haben, schützen.
Bedenke aber das dich Readonly-Flags nicht vor böswilligen Veränderungen wie Ransomware &Co und Usern die Schreibzugriff auf die Ordner haben, schützen.
Zitat von @falkstephan:
Danke Warum es bei mir mit kleiner/gleich geht aber mit kleiner nicht verstehe ich nicht
AddDays zieht 30 Tage vom aktuellen Zeitpunkt ab, d.h. wenn 10:00 Uhr ist es auch am Vergleichsdatum -30 Tage um 10:00 Uhr. Wenn du 0:00 benötigst dann nimmst du die Date Eigenschaft denn bei dieser ist es immer 0:00 Uhr.Danke Warum es bei mir mit kleiner/gleich geht aber mit kleiner nicht verstehe ich nicht
Der Zweck dahinter ist das sowenig Rollen wie Möglich nachinstalliert werden sollen
Naja für so einen Pippifax braucht man ja auch keine Rolle.aber die Anforderung aufkam den Usern für bestimmte Ordner nach 30 Tagen die Möglichkeit zu nehmen nochmals die Dateien zu bearbeiten.
Das hindert die User aber nicht daran trotzdem Veränderungen daran zu machen so lange sie Ändern Rechte im Ordner haben! Sei dir dessen bewusst.Für sowas würde ich pe ein Share erstellen auf dem nur Leserecht besteht und die Dateien am Ursprungsort durch Symlinks ersetzen die auf das ReadOnly Share zeigen.