Excluindo arquivos usando curingas

0

Eu tenho centenas de arquivos com nomes como SageAccts Company Name 2018-06-21 00-00-10 .

A hora e a data estão no título. Desejo excluir todos os arquivos que não tenham uma data de 2018-**-05 , 2018-**-15 ou 2018-**-28 .

Eu não tenho uma grande experiência de codificação para que o PowerShell ou um arquivo de lote seja o melhor.

    
por Conrad Ryan 24.07.2018 / 11:31

2 respostas

1

Melhor que você filtre primeiro com uma Expressão regular e use um (grupo de captura) para aproveitar o dia,
para depois excluir seus dias especiais 05|15|28

Você não especificou uma extensão, portanto nem eu.

## Q:\Test18\SU_1342824.ps1
#Requires -Version 3.0
Push-Location "X:\Folder\to\start"

$RE = [RegEx]'^SageAccts Company Name 2018-[01][0-9]-([0-3][0-9]) [0-2][0-9]-[0-5][0-9]-[0-5][0-9]$'
##                                    year-  month  -(  day     )    hour   - minute   -  second

Get-ChildItem 'SageAccts Company Name 2018-*' -File |
  Where-Object {$_.BaseName -match $RE} |
    Where-Object {$Matches[1] -notmatch '05|15|28' }|
      Remove-Item -Whatif

Se a saída estiver correta, remova o parâmetro -WhatIf do Remove-Item cmdlet

## to generate test files
1..30|%{new-Item -ItemType file -path ("SageAccts Company Name 2018-06-{0:00} 00-00-10.txt" -f $_)}
    
por 24.07.2018 / 14:46
0

O que você está procurando no PowerShell é uma correspondência de expressão regular que usa um lookbehind negativo, indicado por ?(<!) , para excluir os dias desejados.

Get-ChildItem "SageAccts Company Name *" | ?{ $_ -match '2018-(?:0\d|1[1,2])-(?:[0-2]\d|[3][0,1])(?<!05|15|28)' } | Remove-Item -WhatIf
  1. O filtro curinga com Get-ChildItem fornece limitação do arquivo informação recuperada. Get-ChildItem não suporta expressões regulares diretamente.
  2. O ?{} é um atalho para o commandlet Where-Object.
  3. A expressão regular fornecida usada com o operador -match obtenha a lista de arquivos que você deseja.
  4. A opção What-If no Remove-Item impede que a remoção seja realizado ao relatar o que ocorreria. Ele permite que você revise os resultados antes de realmente fazer isso. Se tudo parece bom apenas remova o -What-If e execute-o novamente.

    Você sempre pode usar o Get-Help para saber mais sobre um commandlet.

por 30.07.2018 / 23:45