Я хотел бы удалить только те файлы, которые были созданы более 15 дней назад в определенной папке. Как я могу сделать это с помощью PowerShell?
powershell
powershell-2.0
powershell-3.0
user2470170
источник
источник
Ответы:
Приведенные ответы будут удалять только файлы (что, как известно, содержится в заголовке этого поста), но вот некоторый код, который сначала удалит все файлы старше 15 дней, а затем рекурсивно удалит все пустые каталоги, которые могли остаться позади. Мой код также использует
-Force
опцию для удаления скрытых файлов и файлов только для чтения. Кроме того , я решил не использовать псевдонимы , как OP является новым для PowerShell и не могу понять , чтоgci
,?
,%
и т.д. есть.И, конечно, если вы хотите увидеть, какие файлы / папки будут удалены перед их фактическим удалением, вы можете просто добавить
-WhatIf
переключатель кRemove-Item
вызову командлета в конце обеих строк.Показанный здесь код совместим с PowerShell v2.0, но я также показываю этот код и более быстрый код PowerShell v3.0 в качестве удобных функций многократного использования в моем блоге .
источник
просто (PowerShell V5)
источник
Другой способ - вычесть 15 дней из текущей даты и сравнить
CreationTime
с этим значением:источник
По сути, вы перебираете файлы по заданному пути, вычитаете
CreationTime
из каждого найденного файла текущее время и сравниваете его соDays
свойством результата.-WhatIf
Выключатель будет сказать вам , что будет происходить без удаления файлов (какие файлы будут удалены), снимите переключатель на самом деле удалить файлы:источник
Попробуй это:
источник
-recurse
слишком много, нет? Список dir рекурсивно, удаление элемента не должно быть с включенными childs, верно?Сценарий Esperento57 не работает в старых версиях PowerShell. Этот пример делает:
источник
Другой вариант (15. автоматически набирается на [timespan]):
источник
Это удалит старые папки и его содержимое.
источник
Если у вас возникли проблемы с приведенными выше примерами на Windows 10, попробуйте заменить
.CreationTime
на.LastwriteTime
. Это сработало для меня.источник
LastwriteTime
это не то же самоеCreationTime
,LastwriteTime
обновляется каждый раз, когда файл изменяется.источник
$Files
он пуст, он не будет входить в оператор foreach . Вы должны поместить foreach в операторе if .