【问题标题】:Renaming File in Powershell在 Powershell 中重命名文件
【发布时间】:2018-06-21 14:12:48
【问题描述】:

我正在尝试重命名文件,以便删除名称中的括号:

示例:[Example] Test File (Servers).xls 重命名为 Example Test File (Servers).xls

我的问题是,当我运行它时,它会返回一个错误提示

Rename-Item -Path '.\'[Example'] Test File (Servers).xls' -NewName "Example Test File (Servers).xls"

Rename-Item : 指定路径 C:\Users\Documents\PowerShell\[Example] Test File (Servers).xls 处的对象不存在

另一个问题是当我运行时:

C:\Users\Documents\PowerShell> Get-ChildItem -Path "[Example] Test File (Servers).xls" 

这运行成功,没有错误,所以我知道 PowerShell 找到这个文件没有问题。在这一点上,我不知道为什么这不起作用,因为它可以使用一个命令而不是另一个命令找到文件。

【问题讨论】:

标签: powershell


【解决方案1】:

如果您使用的是现代版本的 Powershell (v4+ iirc),则可以使用 LiteralPath 而不是 Path

它可以处理像[]这样的特殊字符,而不必转义它们。

Rename-Item -LiteralPath ".\[Example] Test File (Servers).xls" -NewName "Example Test File (Servers).xls"

【讨论】:

    【解决方案2】:

    试试:

    用于更改同一目录中的多个文件名:

    Dir | Rename-Item -NewName {$_.name -replace "[Example]","Example"}

    之前的文件名:

    [示例] 测试文件(服务器).xls

    之后的文件名:

    示例测试文件(服务器).xls

    【讨论】:

    • 您使用别名而不是普通的Get-Childitem 是否有明确的原因?
    • @Paxz get-childitem 只是 dir 的别名。请参阅文档。
    • @Paxz 土豆土豆,get-childitem 是 dir 的别名。反之亦然。他们都做同样的事情就是我的意思。 Dir 只是缩写版本。例如。 get-ChildItem - recursive == Dir -r
    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2011-10-21
    • 2018-12-31
    相关资源
    最近更新 更多