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