将文本/数字拆分并添加到文件名

时间:2016-12-02 13:25:26

标签: powershell split rename trim file-manipulation

我一直在尝试编写一个脚本来删除文件名的末尾部分,并将其替换为版本号。我试过修剪和分裂,但由于额外的点和正则表达式不好,我有问题。

这些是文件示例:

Filename.Api.sow.0.1.1856.nupkg
something.Customer.Web.0.1.1736.nupkg

我想从这些文件名中删除0.1.18xx并从变量中添加内部版本号。这可能是1.0.1234.1233(major.minor.build.revision)

所以最终结果应该是:

Filename.Api.sow.1.0.1234.1233.nupkg
something.Customer.Web.1.0.112.342.nupkg

这是我尝试拆分然后重命名。但它不起作用。

$files = Get-ChildItem -Recurse | where {! $_.PSIsContainer}
foreach ($file in $files)
{
$name,$version = $file.Name.Split('[0-9]',2)
Rename-Item -NewName "$name$version" "$name".$myvariableforbuild
}

2 个答案:

答案 0 :(得分:1)

你快到了。这是一个正则表达式的解决方案:

$myVariableForBuild = '1.0.1234.1233'
Get-ChildItem 'c:\your_path' -Recurse | 
    where {! $_.PSIsContainer} | 
    Rename-Item -NewName { ($_.BaseName -replace '\d+\.\d+\.\d+$', $myVariableForBuild) + $_.Extension }

答案 1 :(得分:0)

可能不是最简洁的方法,但我会根据“。”拆分字符串,获取数组的最后一个元素(文件扩展名),然后迭代每个数组元素。如果它的非数字将它附加到一个新字符串,如果数字断开循环。然后将新版本和文件扩展名附加到新字符串。

$str = "something.Customer.Web.0.1.1736.nupkg"
$arr = $str.Split(".")

$extension = $arr[$arr.Count - 1]
$filename = ""
$newversion = "1.0.112.342"

for ($i = 0 - 1; $i -lt $arr.Count; $i++)
{
    if ($arr[$i] -notmatch "^[\d\.]+$")
    {
        # item is not numeric - add to string
        $filename += $arr[$i] + "."
    }
    else
    {
        # item is numeric - end loop
        break
    }    
}

# add the new version
$filename += $newversion + "."

# add the extension
$filename += $extension

显然它不是你问题的完整解决方案,但有足够的东西让你开始。