[英]How do I recursively rename folders with Powershell?
使用 PS 遞歸重命名文件是微不足道的(來自Mike Ormond 博客的示例的變體):
dir *_t*.gif -recurse
| foreach { move-item -literal $_ $_.Name.Replace("_thumb[1]", "")}
我正在嘗試遞歸重命名文件夾結構。
用例是我希望能夠重命名整個 VS.NET 解決方案(例如,從 Foo.Bar 到 Bar.Foo)。 為此,有幾個步驟:
我目前正在這個過程中邁出第一步。
我找到了這個帖子,它談到了挑戰,並聲稱有一個解決方案,但沒有談論那個解決方案是什么。
我一直碰到遞歸牆。 如果我讓 PS 使用標志處理遞歸,則父文件夾會在子文件夾之前重命名,並且腳本會引發錯誤。 如果我嘗試自己實現遞歸,我的頭會很痛,而且 go 的事情嚴重錯誤——對於我的一生,我無法讓事情在遞歸樹的尾部開始重命名。
這是 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
}
}
怎么樣 - 做一個全名的遞歸列表,按全名的長度降序排序,然后通過你的重命名例程運行它。
例如
gci <directory> -recurse |
foreach {$_.fullname} |
sort -length -desc
也許其中的某些東西很有用,這是一個遞歸並將“pre”添加到目錄結構的片段
$dirs = Get-ChildItem c:/foldertorecurse -rec | Where-Object {$_.PSIsContainer -eq 1} | sort fullname -descending
foreach ( $dir in $dirs ) { rename-item -path $dir.fullname -newname ("pre" + $dir.name) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.