Tente o seguinte:
Get-ChildItem |
Where-Object {
[datetime]::ParseExact($_.BaseName, "yyyyMMddHHmmss", $null) -gt (Get-Date).AddMinutes(-5)
} |
Move-Item -Destination C:\Path\to\target_dir
Eu divido o código em várias linhas para facilitar a leitura, mas é claro que você pode transformá-lo em uma linha única e até encurtar um pouco usando Aliases do PowerShell .
Explicação
-
Get-ChildItem
retorna uma lista de todos os arquivos no diretório atual. Nota: ele também retorna subdiretórios, mas este código supõe que você tenha apenas arquivos lá. Os resultados são canalizados (|
) para o próximo comando. -
Where-Object
percorre os resultados do comando anterior e retorna apenas aqueles que correspondem ao critérios especificados.$_
representa o arquivo atual de cada iteração e a propriedade.BaseName
retorna o nome do arquivo sans extension. -
A função
[datetime]::ParseExact()
usa uma string e um formato de data e converte em um objeto datetime. -
Get-Date
retorna a data e a hora atuais. A funçãoAddMinutes()
deduz 5 minutos da hora atual. -
Os arquivos retornados por
Where-Object
, então, são aqueles em que a data e a hora representadas no nome do arquivo não são mais do que 5 minutos mais antigos que a hora atual. -
Por fim,
Move-Item
move os arquivos correspondentes para o diretório especificado.