【问题标题】:PowerShell error in renaming of subfolders重命名子文件夹时出现 PowerShell 错误
【发布时间】:2021-04-10 10:15:48
【问题描述】:

我是 PowerShell 新手。我有以下命令来重命名所有子文件夹:

Get-ChildItem -r | foreach{Rename-Item $_.FullName ($_.Name -replace "2021", "2021 renamed")}

此命令运行正常,但也返回错误信息:

Rename-Item : Source and destination path must be different.
At line:1 char:28
+ ... e | foreach{Rename-Item $_.FullName ($_.Name -replace "2021", "2021 r ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\Users\abc\...def\ghi\2025:String) [Rename-Item], IOException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

...def\ghi\2025 是最后一个子文件夹。

有人可以告诉我我的命令中的错误是什么吗?

【问题讨论】:

    标签: powershell rename subdirectory


    【解决方案1】:

    如果您只想重命名子文件夹,则应添加-Directory 参数。此外,您可以直接通过管道连接到Rename-Item,不需要 foreach 循环。对于那些您实际上没有更改的项目(例如名称中没有 2021,因此新名称与旧名称相同)显示错误消息。您可以将 erroraction 设置为静默继续。

    Get-ChildItem -Directory -Recurse |
        Rename-Item -NewName {$_.Name -replace "2021", "2021 renamed"} -ErrorAction SilentlyContinue
    

    或者,如果您愿意,您可以坚持使用循环,只尝试重命名那些实际具有匹配条件的人

    Get-ChildItem -r | ForEach-Object{
        if($_.name -match '2021')
        {
            Rename-Item $_.FullName ($_.Name -replace "2021", "2021 renamed")
        }
    }
    

    【讨论】:

    • 非常感谢@Doug Maurer - 解释清楚,所以现在我可以停止追逐我的尾巴了!
    • 有一个问题是迭代文件/文件夹并立即在管道中重命名它们。Get-ChildItem 可能会选择已经重命名的项目,为了克服这个问题,你应该让 Get- ChildItem 在管道到 Rename-Item 之前完成,用括号括起来:(Get-ChildItem -Directory -Recurse) | Rename-Item .. 另外,为什么不使用 -Filter '*2021*' 只获取名称中包含 2021 的文件夹?
    猜你喜欢
    • 2019-09-08
    • 2021-09-14
    • 2015-07-16
    • 1970-01-01
    • 2021-04-13
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多