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