Powershell с регулярным выражением и операцией удаления

У меня есть набор файлов резервных копий, например ABC20200216.bak, ABC20200217.bak и т. д. Все они следуют такому шаблону: ABCYYYYMMDD.bak.

У меня есть пакетный скрипт Windows, который удалил все мои файлы резервных копий старше 15 дней. Это работает как по волшебству:

forfiles /p "C:\DB Backup" /m ABC????????.bak /D -15 /C "cmd /c del @path"

Но я хочу внести изменения, чтобы моя резервная копия каждого 1-го числа месяца не удалялась. Поэтому я хочу исключить все файлы ABCYYYYMM01.bak из приведенного выше сценария.

Я узнал, что мне нужно использовать Powershell, потому что forfiles не поддерживает регулярные выражения, и я думаю, что мне понадобится регулярное выражение, чтобы написать это.

Максимум, что я мог сделать, чтобы получить список файлов с помощью Powershell: powershell "dir 'C:\DB Backup' | ?{ $_.Name -match 'ABC[0-9]{8}.*' } | select Name"

Но я не особо разбираюсь в регулярных выражениях, поэтому, пожалуйста, помогите мне с регулярным выражением для исключения файлов, оканчивающихся на 01.bak.

Плюс я не знаю, как совместить вышеуказанный Powershell и операцию удаления. Могу ли я получить некоторую помощь с этим, пожалуйста?


person Szilárd Kotta    schedule 17.02.2020    source источник
comment
.* в конце заменить на .*$(?<!01\.bak)   -  person Wiktor Stribiżew    schedule 17.02.2020
comment
Это помогло мне получить список файлов так, как я хочу, спасибо за это. Но был и второй вопрос: как объединить этот список с операцией удаления, чтобы я мог удалить перечисленные файлы. Этот второй вопрос остался без ответа.   -  person Szilárd Kotta    schedule 19.02.2020
comment
Но я наконец нашел решение: powershell "dir 'C:\DB Backup' | ?{ $_.Name -match 'ABC[0-9]{8}.bak$(?<!13.bak)' } | foreach { $_.Delete() }"   -  person Szilárd Kotta    schedule 19.02.2020