如何使用Powershell重命名

时间:2019-08-19 00:34:38

标签: powershell

如何使用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

3 个答案:

答案 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的初学者,因此我发现更容易理解具有完整命令的答复。