Chciałbym usunąć tylko pliki, które zostały utworzone ponad 15 dni temu w określonym folderze. Jak mogę to zrobić za pomocą programu PowerShell?
powershell
powershell-2.0
powershell-3.0
użytkownik2470170
źródło
źródło
Odpowiedzi:
Podane odpowiedzi usuwają tylko pliki (co wprawdzie jest w tytule tego postu), ale oto kod, który najpierw usunie wszystkie pliki starsze niż 15 dni, a następnie rekurencyjnie usunie wszystkie puste katalogi, które mogły pozostać za. Mój kod wykorzystuje również
-Force
opcję usuwania plików ukrytych i tylko do odczytu. Również wybrałem, aby nie używać aliasów jako OP jest nowy PowerShell i nie może zrozumieć, cogci
,?
,%
, itd. Są.I oczywiście, jeśli chcesz zobaczyć, które pliki / foldery zostaną usunięte przed ich faktycznym usunięciem, możesz po prostu dodać
-WhatIf
przełącznik doRemove-Item
wywołania polecenia cmdlet na końcu obu wierszy.Kod pokazany tutaj jest zgodny z PowerShell v2.0, ale pokazuję ten kod i szybszy kod PowerShell v3.0 jako przydatne funkcje wielokrotnego użytku na moim blogu .
źródło
po prostu (PowerShell V5)
źródło
Innym sposobem jest odjęcie 15 dni od bieżącej daty i porównanie
CreationTime
z tą wartością:źródło
Zasadniczo iterujesz pliki pod daną ścieżką, odejmujesz
CreationTime
każdy znaleziony plik od bieżącego czasu i porównujesz zDays
właściwością wyniku.-WhatIf
Przełącznik powie, co się stanie, bez faktycznie usuwanie plików (które zostaną usunięte pliki), usunąć przełącznik faktycznie usunąć pliki:źródło
Spróbuj tego:
źródło
-recurse
to za dużo, nie? Lista reżimów jest rekurencyjna, usunięcie elementu nie powinno dotyczyć dzieci, prawda?Skrypt Esperento57 nie działa w starszych wersjach PowerShell. Ten przykład:
źródło
Inna alternatywa (15. zostaje automatycznie wpisany na [przedział czasowy]):
źródło
Spowoduje to usunięcie starych folderów i ich zawartości.
źródło
Jeśli występują problemy z powyższych przykładów na polu Windows 10, spróbuj wymienić
.CreationTime
z.LastwriteTime
. To zadziałało dla mnie.źródło
LastwriteTime
to nie to samo coCreationTime
,LastwriteTime
aktualizuje się za każdym razem, gdy plik jest modyfikowany.źródło
$Files
jest pusta, nie wejdzie do instrukcji foreach . Powinieneś umieścić foreach w instrukcji if .