Как я могу удалить переменную строку во всех именах файлов до первого появления дефиса в 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 или любого другого инструмента?
command-line
powershell
Michael_Jna
источник
источник
picture_*_
префикс в твоем случае, или есть варианты?Ответы:
От этот предыдущий вопрос Общая структура файлов с массовым переименованием:
Каждый предмет имеет свое оригинальное имя
$_.Name
и когда обычного метода фиксированной строки .Replace () недостаточно, используйте регулярные выражения.В PowerShell вы можете получить доступ к Replace () на основе регулярных выражений двумя способами:
[regex]::Replace($str, $regex, $replacement)
$str -replace $regex, $replacement
Чтобы просто удалить префикс
Регулярное выражение
^picture_\d+_
будет соответствовать нежелательному префиксу; заменить его ничем.После объединения двух:
Кроме того, чтобы соответствовать вопросу,
^[^-]*-
будет соответствовать всему до (и в том числе) первого тире; заменить его на"2017-"
(при условии, что все файлы принадлежат одному году - в противном случае вы можете случайно потерять информацию).Заменить на часть оригинала
Вы можете сопоставить часть исходного текста, используя
( )
и использовать его в качестве замены, используя$1
($ 2, $ 3 ...) Это даст тот же конечный результат в вашем случае, но более точно соответствует тому, что вы изначально просили.Например, регулярное выражение
"^picture_\d+_(\d+)-"
и замена'$1-'
(должно быть в одинарных кавычках).источник