【问题标题】:Folder names - replace the Full Stop with a Space文件夹名称 - 用空格替换句号
【发布时间】:2019-01-17 12:29:27
【问题描述】:

我有一个文件夹,其子文件夹名称类似于:

The.Train.To.Morning.Town

我想用空格替换所有.

我试过用这个

$dir = "k:\test"
CD $dir
Get-ChildItem -Recurse |
    Where-Object {$_.Name -match '.'} |
    Rename-Item -NewName { $_.Name -replace '.',' '}

然后我得到一个错误,我哪里出错了?谢谢

Rename-Item :路径不是合法形式。在 line:5 char:1 + Rename-Item -NewName { $_.Name -replace '.',' '}

【问题讨论】:

  • 如果我没记错的话,-replaceoperator 与点“。”的正则表达式一起使用。代表任何字符。如果您正在寻找文字点,则必须使用反斜杠 -replace '\.',' ' 对其进行转义
  • 谢谢你,但也重命名了“。”对于文件夹中的文件扩展名,例如The.Train.To.Morning.Town 文件夹包含一个 AVI The.Train.To.Morning.Town.avi 。无论如何要排除扩展名?
  • Rename-Item -NewName {$_.BaseName.replace('.',' ')+$_.Extension}
  • 除了来自@Olaf 的代码 - 如果您不想重命名文件,还可以使用 Directory 参数:Get-ChildItem -Recurse -Directory -Recurse

标签: powershell


【解决方案1】:

@Olaf 在 cmets 中得到了正确的答案,应该将其作为答案提交。 PowerShell -replace 运算符将regular expression 作为搜索参数;由于. 是“匹配任何字符”的正则表达式,您需要用反斜杠“转义”它\:$_.Name -replace '\.',' '

您在 cmets 中指出,这也删除了文件扩展名的 .;在原始问题中包含您担心扩展的信息是一个好主意。然而,就这一点而言,@LotPings 提供了一个很好的解决方案来处理这种情况 ({$_.BaseName.replace('.',' ')+$_.Extension}) - 请注意 .Replace() method(注意:链接到 SS64;我在此找不到 Microsoft Docs 页面)确实使用正则表达式,因此.不需要转义。

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多