Gostaria de excluir apenas os arquivos criados mais de 15 dias atrás em uma pasta específica. Como eu poderia fazer isso usando o PowerShell?
powershell
powershell-2.0
powershell-3.0
user2470170
fonte
fonte
Respostas:
As respostas fornecidas apenas excluirão arquivos (que é o que está no título desta postagem), mas aqui está um código que primeiro excluirá todos os arquivos anteriores a 15 dias e, em seguida, excluirá recursivamente todos os diretórios vazios que possam ter sido deixados atrás. Meu código também usa a
-Force
opção de excluir arquivos ocultos e somente leitura. Além disso, optei por não usar aliases como o OP é novo para PowerShell e não pode entender o quegci
,?
,%
, etc, são.E, claro, se você deseja ver quais arquivos / pastas serão excluídos antes de excluí-los, basta adicionar a
-WhatIf
opção àRemove-Item
chamada de cmdlet no final das duas linhas.O código mostrado aqui é compatível com o PowerShell v2.0, mas também mostro esse código e o código mais rápido do PowerShell v3.0 como funções reutilizáveis úteis no meu blog .
fonte
simplesmente (PowerShell V5)
fonte
Outra maneira é subtrair 15 dias da data atual e comparar
CreationTime
com esse valor:fonte
Basicamente, você repete os arquivos no caminho especificado, subtrai o
CreationTime
arquivo de cada arquivo encontrado a partir do horário atual e compara com aDays
propriedade do resultado. A-WhatIf
opção informará o que acontecerá sem excluir os arquivos (quais arquivos serão excluídos); remova a opção para excluir os arquivos:fonte
Tente o seguinte:
fonte
-recurse
é demais, não? A listagem de diretórios é recursiva; a exclusão do item não deve ser feita com crianças incluídas, certo?O script do Esperento57 não funciona nas versões mais antigas do PowerShell. Este exemplo faz:
fonte
Outra alternativa (15. é digitada em [timespan] automaticamente):
fonte
Isso excluirá pastas antigas e seu conteúdo.
fonte
Se você estiver tendo problemas com os exemplos acima em uma caixa do Windows 10, tente substituir
.CreationTime
por.LastwriteTime
. Isso funcionou para mim.fonte
LastwriteTime
não é o mesmo queCreationTime
,LastwriteTime
é atualizado sempre que o arquivo é modificado.fonte
$Files
estiver vazio, não entrará na instrução foreach . Você deve colocar o foreach na instrução if .