0
我沒有問題,將序列前綴添加到文件名。以下對於有問題的頂級目錄非常有用。Powershell錯誤嘗試重複使用順序前綴*遞歸*
$path="E:\path\newtest1"
$count=4000
Get-ChildItem $path -recurse | Where-Object {!$_.PSIsContainer -and $_.Name -NotMatch '^\d{4}\s+'} | ForEach -Process {Rename-Item $_ -NewName ("$count " + $_.name -f $count++) -whatif}
但是,如果在頂層目錄內的子文件夾中有文件,這些都完全錯過了。 Whatif報告說,對於任何更深層次的文件,它「不存在」。
我已經嘗試了以下,基於查看其他遞歸問題的一些頁面,但正如你可能猜測我不知道它在做什麼。 Whatif表明它至少可以拾取和重命名所有文件。但下列情況太多,使每個數字各文件的多個副本:
$path="E:\path\newtest1"
$count=4000
Get-ChildItem -recurse | ForEach-Object { Get-ChildItem $path | Rename-item -NewName ("$count " + $_.Basename -f $count++) -whatif}
真的渴望得到有關如何獲得第一這兩個片段的一些指導工作,找到所有子目錄中的所有文件並用前面的順序號重命名它們。
或者C)將對象傳遞給ForEach並使用$ _。MoveTo() – TheMadTechnician
非常感謝Keith,我成功改爲{「{0} $($ _。name)」。我不能工作的部分是語法A)將對象管道化爲Rename-item。如果我使用'ForEach-object -Process {Rename-Item {「{0} $($ _。FullName)」-f $ count ++} -whatif}'-whatif reports「由於指定了參數,無法計算參數'Path'作爲腳本塊「。添加-LiteralPath會產生「NamedParameterNotFound」。任何建議非常感謝。 – user3632867
在場景A中,由於您接受管道輸入,因此不要使用「Foreach」直接管入Rename-Item命令。訣竅是你需要訪問NewName參數參數中的管道對象。這就是你使用一個腳本塊來完成這項工作。看到我上面的第一個例子。這適用於PowerShell V3及更高版本。 –