【问题标题】:Rename-Item is not replacing the file name (name ends in a period?)Rename-Item 没有替换文件名(名称以句点结尾?)
【发布时间】:2022-01-31 14:25:43
【问题描述】:

在以下 PowerShell 代码中:

dir "D:\Test\New folder" | Rename-Item -NewName {$_.Name -replace 'PP&C Test (Bank), Ltd.','PP&C Test (Bank) Ltd.'}

我要做的是将 D:\Test\New 文件夹中所有文件名中包含 PP&C Test (Bank), Ltd. 的文件替换为 PP&C Test (Bank) Ltd. 所以基本上只是删除之前的逗号有限公司

在 PowerShell 中执行脚本时,不会重命名任何内容。知道为什么吗?我相信这与 & 和 Brackets () 有关,因为当我对没有这些字符的文件名执行相同操作时,它可以正常工作。

谢谢!

【问题讨论】:

  • -replace [regex]::Escape ('PP&C Test (Bank), Ltd.'), 'PP&C Test (Bank) Ltd.' 还将开关 -File 附加到您的 Get-ChildItem (dir) cmdlet,否则您也会尝试重命名子文件夹
  • 或者只是-NewName {$_.Name.Replace('PP&C Test (Bank), Ltd.','PP&C Test (Bank) Ltd.')},这里不需要正则表达式
  • 您好,谢谢您的回复,不幸的是,这不起作用。文件仍未重命名。
  • 在某些情况下,没有扩展名的文件末尾没有句点?
  • 大家好,抱歉,因为我使用的是机密数据,我拼错了我需要在我的脚本中替换的内容,所以你的两个建议现在都有效,现在我再次尝试了:@Theo dir "D:\Test\New folder" | Rename-Item -NewName {$_.Name -replace [regex]::Escape('PP&C Test (Bank), Ltd.'),'PP&C Test (Bank) Ltd.''} @ MathiasR.Jessen dir "D:\Test\New folder" | Rename-Item -NewName {$_.Name.Replace('PP&C Test (Bank), Ltd.','PP&C Test (Bank) Ltd.')} 谢谢大家的快速回复!

标签: powershell replace


【解决方案1】:

或反斜杠正则表达式的括号。我想知道 -replace 是否应该发出警告。括号用于分组。

'PP&C Test (Bank), Ltd.' -replace 'PP&C Test \(Bank\), Ltd.',
                                  'PP&C Test (Bank) Ltd.'

PP&C Test (Bank) Ltd.

escape() 返回的内容。我不明白为什么空格会被转义。 . 表示任何字符。

[regex]::escape('PP&C Test (Bank), Ltd.')

PP&C\ Test\ \(Bank\),\ Ltd\.

似乎需要在结尾处取消句号。这很奇怪。我想没有期间。

dir | rename-item -newname { $_.name -replace '_PP&C Test \(Bank\), Ltd.',
  '_PP&C Test (Bank) Ltd.' } -whatif

What if: Performing the operation "Rename File" on target "Item:
C:\users\admin\foo\_PP&C Test (Bank), Ltd Destination:
C:\users\admin\foo\_PP&C Test (Bank), Ltd".


dir | rename-item -newname { $_.name -replace '_PP&C Test \(Bank\), Ltd',
  '_PP&C Test (Bank) Ltd' } -whatif

What if: Performing the operation "Rename File" on target "Item:
C:\users\admin\foo\_PP&C Test (Bank), Ltd Destination:
C:\users\admin\foo\_PP&C Test (Bank) Ltd".

get-childitem 有句点,但 name 属性没有句点:

dir '_PP&C Test (Bank), Ltd.'

    Directory: C:\Users\admin\foo

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           1/31/2022 12:52 PM              4 _PP&C Test (Bank), Ltd.


dir | % name

_PP&C Test (Bank), Ltd

【讨论】:

  • 感谢您的回复,不幸的是没有运气,仍然没有重命名它们。目录 "D:\Test\New 文件夹" | Rename-Item -NewName {$_.Name -replace '_PP&C Test (Bank), Ltd.','_PP&C Test (Bank) Ltd.'}
  • 带反斜杠?您可以使用 -whatif 进行测试。为什么现在有下划线?
  • 是的,它没有用。文件名也有下划线,基本上不是文件的全名,它在下划线之前有更多。但我要更改的部分是在下划线之后。
  • 抱歉,我的 PowerShell 代码拼写错误,因为我有机密数据,所以 _PP&C Test (Bank), Ltd 只是一个例子。但是反斜杠确实有效。所以我使用的最终代码是:dir "D:\Test\New folder" | Rename-Item -NewName {$_.Name -replace 'PP&C Test \(Bank\), Ltd.','PP&C Test (Bank) Ltd.'} 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2017-08-23
  • 2019-01-02
  • 2016-05-07
  • 2019-12-15
  • 2011-05-03
  • 1970-01-01
相关资源
最近更新 更多