gpt4 book ai didi

powershell - 如何使用Powershell递归重命名文件夹?

转载 作者:行者123 更新时间:2023-12-04 03:34:14 25 4
gpt4 key购买 nike

使用PS进行递归重命名文件是微不足道的(示例来自Mike Ormond's blog)。

dir *_t*.gif -recurse 
| foreach { move-item -literal $_ $_.Name.Replace("_thumb[1]", "")}

我正在尝试递归重命名文件夹结构。

用例是我希望能够重命名整个VS.NET解决方案(例如,从Foo.Bar更改为Bar.Foo)。为此,有几个步骤:
  • 重命名文件夹(例如\Foo.Bar\Foo.Bar.Model =>\Bar.Foo\Bar.Foo.Model)
  • 重命名文件(例如Foo.Bar.Model.csproj => Bar.Foo.Model.csproj)
  • 在文件内查找和替换以更正 namespace 更改(例如'namespace Foo.Bar'=>'namespace Bar.Foo')

  • 我目前正在此过程的第一步。

    我找到了 this发布,其中谈到了挑战,并声称有解决方案,但没有谈论该解决方案是什么。

    我一直碰到递归墙。如果我让PS使用标志来处理递归,则父文件夹将在子文件夹之前重命名,并且脚本会引发错误。如果我尝试自己实现递归,那么我的头会很疼,而且事情会变得非常糟糕-在我的一生中,我无法让事物在递归树的尾部开始其重命名。

    最佳答案

    这是rbellamy最终得到的解决方案:

    Get-ChildItem $Path -Recurse | %{$_.FullName} |
    Sort-Object -Property Length -Descending |
    % {
    Write-Host $_
    $Item = Get-Item $_
    $PathRoot = $Item.FullName | Split-Path
    $OldName = $Item.FullName | Split-Path -Leaf
    $NewName = $OldName -replace $OldText, $NewText
    $NewPath = $PathRoot | Join-Path -ChildPath $NewName
    if (!$Item.PSIsContainer -and $Extension -contains $Item.Extension) {
    (Get-Content $Item) | % {
    #Write-Host $_
    $_ -replace $OldText, $NewText
    } | Set-Content $Item
    }
    if ($OldName.Contains($OldText)) {
    Rename-Item -Path $Item.FullName -NewName $NewPath
    }
    }

    关于powershell - 如何使用Powershell递归重命名文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216373/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com