Как я могу удалить переменную строку во всех именах файлов до первого появления дефиса в 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 или любого другого инструмента?

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .