Удалить переменную строку во всех именах файлов при первом появлении дефиса в powershell

0

Как я могу удалить переменную строку во всех именах файлов до первого появления дефиса в PowerShell?

У меня есть список файлов в той же папке, как:

 picture_1_2017  -01-02_abc.jpg  picture_10_2017  -01-03_dfc.jpg  picture_111_2017  -01-04_sdfc.jpg  picture_20_2017  -01-05_gh.jpg  picture_354_2017  -01-06_asfd.jpg
... 

Я бы хотел заменить все до первого дефис " от " 2017 ». Например, заменить picture_10_2017 " от " 2017 "и оставьте оставшееся имя как есть, чтобы получить следующий список файлов:

2017-01-02_abc.jpg
2017-01-03_dfc.jpg
2017-01-04_sdfc.jpg
2017-01-05_gh.jpg
2017-01-06_asfd.jpg

Как я могу сделать это в Windows с помощью PowerShell или любого другого инструмента?

Michael_Jna
источник
Это то же самое, что удаление picture_*_ префикс в твоем случае, или есть варианты?
grawity
Да, это то, что я хочу сделать. Текст остается прежним, только номер * меняется. Любые решения?
Michael_Jna

Ответы:

0

От этот предыдущий вопрос Общая структура файлов с массовым переименованием:

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-' (должно быть в одинарных кавычках).

grawity
источник