[英]rename multiple folder to Uppercase not files using powershell
這些技巧可能並不明顯。 這個怎么樣? 嗯,這實際上不起作用。 您不能在 powershell 中以大寫形式將文件夾重命名為相同的內容。
# doesn't work!
get-childitem -recurse -directory -path "C:\Users\Xyz\Desktop\sample" |
Rename-Item -NewName { $_.name.toupper() } -whatif
有時從 powershell 調用 cmd 效果更好。 首先嘗試將其作為“whatif”,看看它是否符合您的要求。 如果我真的理解這個問題。 所有這些都是回顯字符串。 這個命令只是“假裝”。
get-childitem -recurse -directory -path "C:\Users\Xyz\Desktop\sample" |
foreach { write-host cmd /c ren $_.fullname $_.name.toupper() }
如果這看起來不錯,這實際上是重命名。 但是如果出現問題,也許可以進行備份。 能夠撤消操作。
get-childitem -recurse -directory -path "C:\Users\Xyz\Desktop\sample" |
foreach { cmd /c ren $_.fullname $_.name.toupper() }
要將Get-ChildItem
的輸出僅限於目錄,請使用-Directory
開關(PSv3+;在 PSv2 中,管道到Where-Object { $_.PSIsContainer }
除此之外,您的解決方案應該可以工作,但不是由於.NET 的System.IO.DirectoryInfo.MoveTo()
方法(以及System.IO.Directory.Move()
方法)中的概念缺陷,PowerShell 的Rename-Item
從 .NET Core 3.0 preview6 / .NET 4.8開始, Rename-Item
cmdlet 基於:
該方法無法將目錄名稱的大小寫變體識別為不同的名稱,並且因Source and destination path must be different
失敗。
當然,雖然 NTFS不區分大小寫,但它也保留大小寫,因此應該可以將foo
重命名為FOO
,例如。
解決方法(PSv4+):
注意: js2010 的有用答案提供了另一種解決方法,它基於為每個輸入文件夾調用cmd.exe
以使用其ren
命令。 雖然它在概念上更簡單,但需要注意的是,這種為每個處理的文件夾創建子進程的方法效率低下且速度緩慢。 也就是說,對於偶爾可能無關緊要的重命名操作。
$path = 'C:\Users\Xyz\Desktop\sample'
Get-ChildItem -LiteralPath $path -Recurse -Directory |
Where-Object { $_.Name -cne $_.Name.ToUpper() } -PipelineVariable dir |
Rename-Item -PassThru -NewName { [IO.Path]::GetRandomFileName() } |
Rename-Item -NewName { $dir.Name.ToUpper() }
該解決方法將匹配的文件夾臨時重命名為一個臨時的、隨機生成的名稱 ( [IO.Path]::GetRandomFileName()
),然后應用原始名稱的全大寫版本。
輸入文件夾的原始狀態和名稱是通過變量$dir
捕獲的,該變量被“隱藏”以供以后通過公共-PipelineVariable
參數使用。
[1] 警告:當您使用Get-ChildItem
或Get-Item
按字面名稱報告特定目錄或文件時,您指定的任何大小寫變體都會被報告回來,即使存儲在文件系統中的真實大小寫變體可能不同(相比之下,文件資源管理器總是向您顯示真實情況)。 要查看真實情況,請使用Get-ChildItem <parentDir> -Filter <name>
或者,作為可能顯示其他項目的快速解決方法,但是,將*
附加到名稱/路徑。 在這兩種情況下,名稱都被視為通配符模式,匹配過程的結果反映了真實情況。
如何雙引號文件夾名稱? 有些文件夾有空格...
寫主機 cmd /c ren $ .fullname $ .name.toupper()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.