Исходя из этого предыдущего вопроса, общая структура файлов с массовым переименованием:
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-' (должны быть в одинарных кавычках).