Исходя из этого предыдущего вопроса, общая структура файлов с массовым переименованием:
Get-ChildItem <glob> | foreach { Rename-Item $_ <newname> }
Каждое изделие имеет свое оригинальное имя, хранящееся в $_.Name
и когда обычная фиксированная строка.Метод Replace() недостаточно, используйте регулярные выражения.
В PowerShell вы можете получить доступ к Replace() на основе регулярных выражений двумя способами:
[regex]::Replace($str, $regex, $replacement)
$str -replace $regex, $replacement
Чтобы просто удалить префикс
Регулярное выражение ^picture_\d+_
будет соответствовать нежелательному префиксу; заменить его ничем.
После объединения двух:
Get-ChildItem *.jpg | % { Rename-Item $_ ([regex]::Replace($_.Name, "^picture_\d+_", "")) }
Get-ChildItem *.jpg | % { Rename-Item $_ ($_.Name -replace "^picture_\d+_", "") }
В качестве альтернативы, чтобы соответствовать вопросу, ^[^-]*-
будет соответствовать всему, вплоть до (включая) первую черту; замените его на "2017-"
(при условии, что все файлы принадлежат одному году - в противном случае вы можете случайно потерять информацию).
Заменить на часть оригинала
Вы можете сопоставить часть исходного текста с помощью ( )
и использовать его в качестве замены, используя $1
($ 2, $ 3 ...) Это даст тот же конечный результат в вашем случае, но более точно соответствует тому, что вы изначально просили.
Например, регулярное выражение "^picture_\d+_(\d+)-"
и замена '$1-'
(должны быть в одинарных кавычках).