Usuwanie plików przy użyciu symboli wieloznacznych

0

Mam setki plików o nazwie jak SageAccts Company Name 2018-06-21 00-00-10.

Data i godzina są w tytule. Życzę, aby usunąć wszystkie pliki, które nie mają datę 2018-**-05, 2018-**-15lub 2018-**-28.

Nie mam dużego doświadczenia w programowaniu, więc PowerShell lub plik wsadowy byłyby najlepsze.

Conrad Ryan
źródło
Czy możesz również pracować z modyfikacją godziny / daty pliku, a nie z częścią nazwy pliku? Jeśli tak, możesz użyć do tego plików forfiles.
LPChip

Odpowiedzi:

1

Najlepiej najpierw przefiltruj za pomocą wyrażenia regularnego i użyj (grupy przechwytywania), aby przywrócić dzień,
a następnie wykluczyć swoje specjalne dni05|15|28

Nie określiłeś rozszerzenia, więc ja też nie.

## Q:\Test\2018\07\24\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

Jeśli dane wyjściowe wyglądają OK, usuń -WhatIfparametr z polecenia Remove-Itemcmdlet

## to generate test files
1..30|%{new-Item -ItemType file -path ("SageAccts Company Name 2018-06-{0:00} 00-00-10.txt" -f $_)}
LotPings
źródło
0

To, czego szukasz w programie PowerShell, to dopasowanie wyrażenia regularnego, które używa negatywnego wyglądu, oznaczonego przez ?(<!), aby wykluczyć pożądane dni.

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. Filtr wieloznaczny z Get-ChildItem zapewnia ograniczenie pobieranych informacji o pliku. Get-ChildItem nie obsługuje bezpośrednio wyrażeń regularnych.
  2. ?{}Jest skrótem dla commandlet Where-Object.
  3. Podane wyrażenie regularne używane z -matchoperatorem otrzyma listę plików, które chcesz.
  4. Przełącznik What-If na Remove-Item uniemożliwia usunięcie podczas zgłaszania, co się stanie. Umożliwia przeglądanie wyników przed ich wykonaniem. Jeśli wszystko wygląda dobrze, po prostu usuń -What-Ifi uruchom je ponownie.

    Zawsze możesz skorzystać z pomocy Get-Help, aby dowiedzieć się więcej o komendzie.

JamieSee
źródło