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