Obter os arquivos cuja data no nome do arquivo é maior do que alguma data específica usando o script do Powershell

0

Pergunta

Eu tenho uma data específica "2021/11/28", eu quero a lista de arquivos de exemplo, nomes de arquivos(abaixo), cujo nome do arquivo é maior do que 2021/11/28. lembre-se não com o tempo de criação dos nomes de arquivo.

 "test_20211122_aba.*"
 "abc_20211129_efg.*"
 "hij_20211112_lmn.*" 
 "opq_20211130_rst.*"

Eu estou esperando chegar

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

Realmente aprecio a sua ajuda.

powershell powershell-4.0
2021-11-23 18:40:47
1

Melhor resposta

1

Você não estritamente necessário para analisar as seqüências de caracteres em datas ([datetime] instâncias): Porque a data cadeias incorporado em seus nomes de arquivo em um formato onde a sua lexical classificação é equivalente a cronológica de classificação, você pode comparar a seqüência de representações diretamente:

# Simulate output from a Get-ChildItem call.
$files = [System.IO.FileInfo[]] (
  "test_20211122_aba1.txt",
  "abc_20211129_efg2.txt",
  "hij_20211112_lmn3.txt",
  "hij_20211112_lmn4.txt",
  "opq_20211130_rst5.txt"
)

# Filter the array of files.
$resultFiles = 
  $files | Where-Object {
    $_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and
      $Matches[1] -gt ('2021/11/28"' -replace '/')
   }

# Print the names of the filtered files.
$resultFiles.Name
  • $_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' procura (o último) de execução de exatamente 8 dígitos no nome de cada arquivo através de um grupo de captura ((...)), refletida na automático $Matches variável de entrada com índice 1 ($Matches[1]) depois, se encontrado.

  • '2021/11/28"' -replace '/' remove todos os / caracteres da seqüência de caracteres de entrada, para fazer o formato da data de cordas mesmo. Para resumir, a solução acima efectua esta substituição em cada ciclo de operação. Na prática, você deve fazer isso uma vez, antes do laço, e atribuir o resultado a uma variável para uso dentro do loop.

2021-11-23 20:35:51

com certeza, vou logo. De alguma forma eu não conseguia ver o meu comentário anterior. Comentando de novo " Impressionante! O código funcionou como um encanto. Obrigado"
Razz

Você poderia pls ajuda. Eu estou trabalhando em outro script que exige para comparar o mesmo com a data de hoje. Algo como isso ... mas eu estou ficando problema de formatação. Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@Razz, substituir (Get-Date).Date com (Get-Date).ToString('yyyyMMdd'). Se você precisar de mais ajuda, por favor, crie uma nova questão post.
mklement0

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................