我在顺序命名的文件夹中有JPEG文件:table1.jpg,table2.jpg,table3.jpg,...,table11.jpg
我需要按顺序对它们进行一些处理,但是Get-ChildItem
将返回此值(即使使用Sort
):
table1.jpg
table10.jpg
table11.jpg
table2.jpg
table3.jpg
...
我想添加0
以正确的顺序获取它们:
table01.jpg
table02.jpg
table03.jpg
...
table11.jpg
我尝试使用RegEx和此命令预览新名称:
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)
您可以使用命名组:
$filename -replace "(?<first>.*[^0-9])(?<second>[0-9]{1}\.jpg)", '${first}0${second}'
答案 1 :(得分:0)
'"$1"0$2'
这应该这样做。
答案 2 :(得分:0)
用于指示编号反向引用而没有歧义的正确语法是${1}
。
这是您的陈述的更正版本:
Get-ChildItem | % { $_.Name -replace "(.*\D)(\d\.jpg)",'${1}0$2' }
注意:我还使用\D
,[^0-9]
的内置字符类,\d
代替[0-9]
。