Powershell替换文件名

Powershell替换文件名,powershell,Powershell,我使用与重命名相同的逻辑,但很难使其正常工作,这些失败是由于命名约定造成的吗 示例文件: filename.xxxx.xx_xxx(2).jpg 预期成果: filename.xxxx.xx_xxx.jpg 以下是我所拥有的: $toRename = Get-ChildItem ".\files" foreach($x in $toRename){ $x | Rename-Item -NewName { $_.Name -replace " (2

我使用与重命名相同的逻辑,但很难使其正常工作,这些失败是由于命名约定造成的吗

示例文件: filename.xxxx.xx_xxx(2).jpg

预期成果: filename.xxxx.xx_xxx.jpg

以下是我所拥有的:

$toRename = Get-ChildItem ".\files" 

    foreach($x in $toRename){
    $x | Rename-Item -NewName { $_.Name -replace " (2)", "" }
    }
我添加了一个
-WhatIf
,文件名根本没有改变。我肯定错过了一些明显的东西,但我想不出来


谢谢大家

您需要转义括号,它们是一个特殊字符

foreach($x in $toRename)
{
    Rename-Item -Path $x.FullName -NewName ($x.Name -replace "\s\(2\)")
}

您需要对括号进行转义,它们是一个特殊字符

foreach($x in $toRename)
{
    Rename-Item -Path $x.FullName -NewName ($x.Name -replace "\s\(2\)")
}

您不能在foreach中使用$\uu,只能使用$x

  • 使用“foreach”
  • 使用ForEach对象

  • 您不能在foreach中使用$\uu,只能使用$x

  • 使用“foreach”
  • 使用ForEach对象

  • 这是对的,
    -replace
    对第一个参数使用正则表达式。有关更多信息,请参阅。谢谢,我想这可能与括号有关。。。还有ty@JeffZeitlin用于材料。这是正确的
    -replace
    对第一个参数使用正则表达式。有关更多信息,请参阅。谢谢,我想这可能与括号有关。。。同样感谢ty@JeffZeitlin的材料。感谢这一点,我将使用第二个答案tho,因为它解释了为什么我的初始脚本不起作用(特殊角色)。感谢这一点,我将使用第二个答案tho,因为它解释了为什么我的初始脚本不起作用(特殊角色)。
    Get-ChildItem ".\files"  | ForEach-Object { Rename-Item -Path $_ -NewName $_.Name.Replace(" (2)", "") }