使用split在分隔符之前打印最后一个字符

时间:2016-01-19 07:08:51

标签: powershell powershell-v2.0 powershell-v3.0

我有几个文件名为trace0.log,trace1.log,trace2.log,trace3.log .... trace8.log。我想捕获文件名中的值(0,1,2,3 ... 8)并存储到变量中,然后再添加1,这样我就可以重命名它们(从高到低)。

有没有一种简单的方法可以做到这一点?

例如:

trace8.log becomes trace9.log
trace7.log becomes trace8.log
…
…
trace1.log becomes trace2.log
trace0.log becomes trace1.log

脚本:

$Path = "E:\Files\"
$F = Get-ChildItem $Path -Filter *.log 
$F.Name
$FNSplit = $F.Name.Split(".")[1]
$FNSplit

现在,它会在分割后打印第一个字符串(即日志)。

1 个答案:

答案 0 :(得分:0)

我会使用正则表达式来解析文件名(可能有超过9个文件)。

这里是一个示例,我使用Get-ChildItem cmdlet检索所有日志文件,按数字降序排序(否则,重命名文件时会因为文件已经存在而出错)并最终重命名文件使用正则表达式和Rename-Item cmdlet:

$Path = 'E:\Files\'
gci $Path -Filter *.log |
    sort { [int][regex]::Match($_.BaseName, '(.*?)(\d+)').Groups[2].Value } -Descending | 
     % {
        $regexResult = [regex]::Match($_.Name,'(.*?)(\d+)\.(.*)');
        $_ | Rename-Item -NewName ('{0}{1}.{2}' -f $regexResult.Groups[1].Value, ([int]$regexResult.Groups[2].Value +1), $regexResult.Groups[3].Value)
    }
相关问题