将自动递增数添加到文件名字符串

时间:2017-08-18 04:09:30

标签: powershell

我希望我的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

依旧......

3 个答案:

答案 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++