我有几个文件名为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
现在,它会在分割后打印第一个字符串(即日志)。
答案 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)
}