2014-12-04 7 views
1

У меня есть файлы JPEG в папке с именем последовательно: table1.jpg, table2.jpg, table3.jpg, ..., table11.jpgКак добавить число в переменную области RegEx в PowerShell?

Мне нужно сделать некоторую обработку на них в последовательном порядке, но Get-ChildItem вернет это (даже с Sort):

table1.jpg 
table10.jpg 
table11.jpg 
table2.jpg 
table3.jpg 
... 

Я хотел бы добавить 0, чтобы получить их в правильном порядке:

table01.jpg 
table02.jpg 
table03.jpg 
... 
table11.jpg 

Я попытался с помощью регулярных выражений с этой командой для предварительного просмотра новые имена:

Get-ChildItem | % { $_.Name -replace "(.*[^0-9])([0-9]{1}\.jpg)",'$10$2' } 

Идея заключается в том, чтобы получить первую часть имени без каких-либо цифр в первой области, и одна цифры плюс расширение во второй области. Это исключает файлы с двумя цифрами. И тогда я могу заменить на: первую область + 0 + вторую область.

Моя проблема в том, что «0» рассматривается как 10 долларов США вместо $ 1 + «0», я не знаю, как это сказать.

Какой будет правильный синтаксис? Я попытался "$ 10 $ 2", "$ 1 \ 0 $ 2", "$ 1`0 $ 2", '$ 1 "0" $ 2'

ответ

0

Правильный синтаксис для указания пронумерованный обратной ссылки без двусмысленности ${1}.

Вот исправленная версия вашего заявления:

Get-ChildItem | % { $_.Name -replace "(.*\D)(\d\.jpg)",'${1}0$2' } 

Примечание: Я также использовал \D, который является встроенный символьный класс для [^0-9] и \d вместо [0-9].

+0

Это точно я пропустил, фигурные скобки. Спасибо за указание \ D и \ d. Благодаря! Ответа на этот вопрос ojk также очень интересно. Оба решения проблемы. – LoTus

+0

Вы должны пересмотреть любые ответы, которые помогли вам или предоставили хорошую информацию. Таким образом, вы можете дать @ojk некоторый кредит тоже. –

+0

Я бы хотел, и я попробовал, но у меня пока нет достаточной репутации. – LoTus

0
'"$1"0$2' 

Это должно сделать это.

+0

Он закрыт для решения :) Это не совсем то, что я смотрю на это, как ставит кавычки: «Таблица» 01.jpg TABLE11.jpg TABLE12.jpg TABLE13.jpg «Таблица» 02.jpg «ТАБЛИЦА» 03.jpg «ТАБЛИЦА» 04.jpg – LoTus

+0

@LoTus http://regex101.com/r/yR3mM3/48 на основе идеи от ojk – vks

+0

Очень хороший инструмент, я тренируюсь с ним. – LoTus

1

Вы можете использовать именованные группы:

$filename -replace "(?<first>.*[^0-9])(?<second>[0-9]{1}\.jpg)", '${first}0${second}' 
+0

Отлично! Я не знал об этом. Чистота и эффективность. – LoTus

Смежные вопросы