rbe*_*amy 9 powershell recursion file-rename
使用PS递归重命名文件是微不足道的(来自Mike Ormond博客的示例变体):
dir *_t*.gif -recurse
| foreach { move-item -literal $_ $_.Name.Replace("_thumb[1]", "")}
Run Code Online (Sandbox Code Playgroud)
我正在尝试递归重命名文件夹结构.
用例是我希望能够重命名整个VS.NET解决方案(例如从Foo.Bar到Bar.Foo).要做到这一点,有几个步骤:
我目前正在这个过程的第一步.
我找到了这篇文章,讨论了挑战,并提出了一个解决方案,但没有谈到解决方案是什么.
我一直跑进递归墙.如果我让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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13079 次 |
| 最近记录: |