我希望我的PowerShell脚本每次都按增量编号修改文件名。
这是我的文件名:abc-0.2.0.1-SNAPSHOT-barista.zip
。
我想写一个语法,每次都会增加它,如下所述:
abc-0.2.0.2-SNAPSHOT-barista.zip abc-0.2.0.3-SNAPSHOT-barista.zip abc-0.2.0.4-SNAPSHOT-barista.zip abc-0.2.0.5-SNAPSHOT-barista.zip abc-0.2.0.6-SNAPSHOT-barista.zip abc-0.2.0.7-SNAPSHOT-barista.zip abc-0.2.0.8-SNAPSHOT-barista.zip abc-0.2.0.9-SNAPSHOT-barista.zip abc-0.2.0.10-SNAPSHOT-barista.zip abc-0.2.0.11-SNAPSHOT-barista.zip
依旧......
答案 0 :(得分:3)
使用带回调函数的正则表达式替换:
$name = 'abc-0.2.0.4-SNAPSHOT-barista.zip'
[regex]$re = '(.*?\.)(\d+)(-SNAPSHOT-.*\.zip)'
$cb = {
$a, $b, $c = $args[0].Groups[1..3].Value
'{0}{1}{2}' -f $a, ([int]$b+1), $c
}
$re.Replace($name, $cb)
答案 1 :(得分:1)
要评估您需要的最高数量,以便将它们设置为相同的长度,否则使用alpha排序10将小于9。
我仍然在与RegEx挣扎,但Ansgar更快,所以我将这两部分结合起来
$Last = Get-ChildItem abc-*-SNAPSHOT-barista.zip |
Sort-Object {[Regex]::Replace($($_.Basename),'\d+',{$args[0].Value.PadLeft(10, '0')})}|
Select -Last 1
[regex]$re = '(.*?\.)(\d+)(-SNAPSHOT-.*\.zip)'
$cb = {
$a, $b, $c = $args[0].Groups[1..3].Value
'{0}{1}{2}' -f $a, ([int]$b+1), $c
}
$re.Replace($Last.Name, $cb)
示例输出:
> Q:\Test\2017\08\18\SO_45748408.ps1
abc-0.2.0.12-SNAPSHOT-barista.zip
答案 2 :(得分:0)
您可以做的是将0.2.0.x位设置为变量
$version = 3
然后,每次执行操作时,该变量都会增加一个 即
*perform action*
$version++