2014-12-04 52 views
1

我在一個按順序命名的文件夾中有JPEG文件:table1.jpg,table2.jpg,table3.jpg,...,table11.jpg如何在PowerShell中將一個數字追加到RegEx區域變量中?

我需要對它們按順序進行一些處理,但是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][^0-9]內置字符類和\d

+0

這正是我錯過了,大括號。感謝您指出\ D和\ d。謝謝! 通過回答ojk也很有趣。兩者都解決了問題。 – LoTus 2014-12-04 13:23:32

+0

你應該upvote任何答案,幫助你或提供良好的信息。這樣,你也可以給@ojk一些功勞。 – 2014-12-04 14:14:10

+0

我想和我嘗試,但我沒有足夠的聲望呢。 – LoTus 2014-12-05 10:27:52

0
'"$1"0$2' 

這應該這樣做。

+0

它是封閉的解決方案:)這不正是我期待已久,因爲它提出報價: 「TABLE」 01.JPG TABLE11.jpg TABLE12.jpg TABLE13.jpg 「TABLE」 02.JPG 「TABLE」03.jpg 「TABLE」04.jpg – LoTus 2014-12-04 12:29:17

+0

@LoTus http://regex101.com/r/yR3mM3/48基於來自ojk的想法 – vks 2014-12-04 12:54:46

+0

非常好的工具,我會用它訓練自己。 – LoTus 2014-12-04 13:31:05

1

您可以使用命名組:

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

太棒了!我不知道這件事。清潔和高效。 – LoTus 2014-12-04 13:21:09

相關問題