将未知子字符串中的数字增加一



我需要获得复制的最后一个文件的名称,然后递增一以获得下一个文件。这些文件遵循DDMM###模式。TXT,其中###将以000开始,并以005结束。我知道我可以使用子串来获得###,然后递增1,然后使用replace将###替换为新的递增的";字符串";。我只是想知道是否有更优雅的方法可以做到这一点。

$value = $filetotransfer.substring(4,3)
$newvalue = ([int]$value+1).ToString('000')
$filetotransfer = $filetotransfer.Replace($value,$newvalue)

其中$filetotransfer可以是mmdd000.0txt到mmdd005.txt,具体取决于一天中的时间。

  • 如果您使用的是PowerShell(Core(7+:

    # -> '0506001.txt'
    '0506000.txt' -replace '(?<=^d{4})...', { '{0:000}' -f (1 + $_.Value) }
    
  • Windows PowerShell中,-replace运算符不支持脚本块({ ... }(作为替换操作数,这使得解决方案更加复杂,因为直接调用底层。NET API是必需的:

    # -> '0506001.txt'
    [regex]::Replace('0506000.txt', '(?<=^d{4})...', { param($m) '{0:000}' -f (1 + $m.Value) })
    

有关这些技术的解释,请参阅此答案。

最新更新