Powershell 使用“拆分”打印delimeter前的最后一个字符

Powershell 使用“拆分”打印delimeter前的最后一个字符,powershell,powershell-2.0,powershell-3.0,Powershell,Powershell 2.0,Powershell 3.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.

我有几个名为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

现在,它打印分割后的第一个字符串(即log)

我将使用regex解析文件名(可能有9个以上的文件)

下面是一个示例,我使用cmdlet检索所有日志文件,按编号降序排列(否则,重命名文件时会出现错误,因为文件已经存在),最后使用正则表达式和cmdlet重命名文件:


我将使用regex解析文件名(可能有9个以上的文件)

下面是一个示例,我使用cmdlet检索所有日志文件,按编号降序排列(否则,重命名文件时会出现错误,因为文件已经存在),最后使用正则表达式和cmdlet重命名文件:


$F.Name[-1]将捕获文件名的最后一个字符。$F.Name[-1]将捕获文件名的最后一个字符。
$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)
    }