如何使用Powershell在Windows中重命名一堆文件。 文件名示例:
Image001 L@ter
Image002 L@ter
我尝试了这两个命令,
get-childitem * | ForEach { Move-Item -LiteralPath $_.name $_.name.Replace("L@ter","")}
get-childitem * | ForEach { rename-item $_ $_.Name.Replace("L@ter","") }
我希望输出为Image001,Image002
答案 0 :(得分:0)
您的问题说要重命名,但是您的代码示例正在使用Move-Item
命令。我将假设您不确定要正确重命名它们,因为您实际上并没有移动它们。
Get-ChildItem "C:\Temp\" -File | ForEach-Object {
Rename-Item -Path $_.FullName -NewName "$($_.Name -replace '\s*(l@ster)')"
}
\s*
将匹配您的主要捕获组之前的任何空白
(l@ster)
是主要的捕获组,它查找该确切短语并将其匹配。
答案 1 :(得分:0)
这是常见的问题类别。我喜欢将重命名项目与脚本块一起使用。如果看起来正确,请脱掉-whatif。我假设您不希望名称末尾有空格。
ls '* l@ter' | rename-item -newname { $_.name -replace ' l@ter' } -whatif
答案 2 :(得分:0)
首先,有关命令的一些小细节:
get-childitem * | ForEach { Move-Item -LiteralPath $_.name $_.name.Replace("L@ter","")}
LiteralPath 的用途应与键入时完全相同。所以我将它与
一起使用 如果必须使用$ .FullName 而不是 $ .name 奇怪的路径(例如网络共享)。
秒: 在移动项和重命名项的帮助中,我可以看到 -path 参数:
Required? true
Position? 0
Default value None
Accept pipeline input? True (ByPropertyName, ByValue)
这意味着我们可以通过管道将对象集合放入其中,重命名的cmdlet将自动通过该集合:
Get-ChildItem -Path 'c:\tests\' -File -Recurse | Rename-Item -NewName ($_.name -replace ' l@ter') -Force -WhatIf
对于Drew和Js2010的答复,我已将此答复多余,但是,由于我是powershell的初学者,因此我发现更容易理解具有完整命令的答复。