У меня есть сотни файлов, названных как SageAccts Company Name 2018-06-21 00-00-10 .

Время и дата указаны в заголовке. Я хочу удалить все файлы, у которых нет даты 2018-**-05 , 2018-**-15 или 2018-**-28 .

У меня нет большого опыта программирования, поэтому лучше всего использовать PowerShell или командный файл.

2 ответа2

1

Лучше всего сначала отфильтровать с помощью регулярного выражения и использовать (группу захвата) для определения дня,
чтобы потом исключить ваши особые дни 05|15|28

Вы не указали расширение, поэтому я тоже не буду

## 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

Если выходные данные выглядят нормально, удалите параметр -WhatIf из командлета Remove-Item

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

Что вы ищете в PowerShell - это совпадение с регулярным выражением, которое использует отрицательный вид сзади, обозначенный ?(<!) , чтобы исключить нужные дни.

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. Фильтр подстановочных знаков с Get-ChildItem обеспечивает ограничение получаемой информации о файле. Get-ChildItem не поддерживает регулярные выражения напрямую.
  2. ?{} является сокращением для командлета Where-Object.
  3. Предоставленное регулярное выражение, используемое с оператором -match , получит список файлов, которые вы хотите.
  4. Переключатель «Что, если» на элементе «Удалить элемент» предотвращает выполнение удаления при сообщении о том, что произойдет. Это позволяет вам просмотреть результаты, прежде чем делать это. Если все выглядит хорошо, просто удалите -What-If и запустите его снова.

    Вы всегда можете использовать Get-Help, чтобы узнать больше о командлете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .