Как переименовать файлы в Powershell с помощью регулярных выражений? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть несколько файлов со словами и цифрами в конце имени файла.По некоторым причинам мое регулярное выражение не работает.Вот примеры моих имен файлов:

test abc12345.zip
abcd def98765.zip
test xyz23456.zip

Вот мое регулярное выражение:

dir | rename-item -NewName {$_.name -replace "(\w\w\w\d\d\d\d\d.zip)","[$1].zip"}

Когда я запускаю фрагмент выбора, он удаляет:

abc12345
def98765
xyz23456

изимена файлов и просто вставляет скобки:

test [].zip
abcd [].zip
test [].zip

Как мне сохранить содержимое в скобках?Не уверен, почему мой код удаляет все, что находится между []

test [abc12345].zip
abcd [def98765].zip
test [xyz23456].zip

1 Ответ

0 голосов
/ 02 февраля 2019

Заменить двойные кавычки на одинарные.Powershell анализирует содержимое двойных кавычек и заменяет ваш $1 содержимым переменной (не существует / пусто) $1


Также можно сделать регулярное выражениеПроще использовать квантификаторы для ваших слов и цифр, так что

 (\w\w\w\d\d\d\d\d.zip)

можно изменить на эту более короткую версию

(\w{3}\d{5}.zip)

Если посмотреть на ожидаемый результат, есть еще одна проблемас вашей текущей группой захвата, которая включает расширение .zip.Что вы действительно хотите вместо захвата всего, включая расширение

(\w{3}\d{5}.zip)

, это захватить только слово / цифру

(\w{3}\d{5}).zip

Теперь вы можете использовать захватгруппа, чтобы поставить скобки вокруг них.Ваше окончательное регулярное выражение и замена могут тогда выглядеть следующим образом

dir | rename-item -NewName {$_.name -replace '(\w{3}\d{5}).zip','[$1].zip'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...