Вы можете сделать следующее, если вы находитесь в каталоге, содержащем файлы:
Get-ChildItem -Path .\[0-9]*[0-9] -File |
Where Name -match '^\d+$' |
Rename-Item -NewName {$_.Name -replace '(\d{3})(\d{3})(\d+)','[$1][$2][$3]'} -WhatIf
Удалите параметр -WhatIf
для выполнения операции переименования.
Объяснение:
Параметр Get-ChildItem -Path
поддерживает подстановочные знаки. Цель .\[0-9]*[0-9]
- заглянуть в текущий каталог (.
) и найти элементы, которые начинаются и заканчиваются цифрой. -File
возвращает только файлы. Это просто сводит к минимуму работу более неэффективного оператора Where
.
^\d+$
- это выражение регулярного выражения, используемое в данном случае в сочетании с оператором -match
. Это просто означает возврат файлов с именами, которые начинаются (^
) с одного или нескольких (+
) чисел (\d
) и заканчиваются ($
) после этих чисел.
Name
или BaseName
свойство должно соответствовать здесь, так как у вас нет расширений файлов в вашем сообщении. Если у вас есть расширения файлов, то вместо этого нужно будет использовать свойство BaseName
.
Операция -replace
заменяет три числа (\d{3}
), три числа и оставшиеся числа, заключенные в квадратные скобки. каждая группа. Поскольку мы используем ()
вокруг механизмов регулярных выражений, мы создаем группы захвата с именами 1,2,3, начиная слева направо. Строка замены позволяет нам в несколько ограниченных пределах манипулировать (Windows PowerShell только из-за того, что в Core имеется больше опций) выводом.