【问题标题】:Renaming Recursively with if-condition使用 if 条件递归重命名
【发布时间】:2015-11-26 14:05:24
【问题描述】:

我在将重命名与 if 条件结合使用时遇到了很大的麻烦。当文件与以前的名称相同时,PS 无法重命名,之后不会执行任何操作。 另外它无法递归重命名。

我想做某事:

$entrys = Get-ChildItem -Recurse $myPath
foreach ($name in $entrys) {
    $newName=$name.FullName -replace('[\,\/\*\+\#\~\-\=\^\°\$\%\&\<\>\|]','')
    if (-not ($newName -like $name)) {
         Rename-Item $name -NewName $newName
    }
}

我发现了类似here的东西,但那里没有任何条件。

那么我如何在重命名之前通过管道进入 if 条件,这样我就可以直接从 get-childitem -recurse 管道到if() then rename()?还是有其他可能?

感谢您的帮助

【问题讨论】:

    标签: powershell recursion conditional-statements


    【解决方案1】:

    当我尝试您的代码时,我遇到了同样的问题,它报告它无法重命名文件。但是,我修改了您的一些代码,现在它似乎可以工作了:

    $entrys = Get-ChildItem -Recurse $myPath -File
    foreach ($name in $entrys) {
        $newName = $name.Name -replace('[\,\/\*\+\#\~\-\=\^\°\$\%\&\<\>\|]','')
        if ($newName -ne $name.Name) {
             Rename-Item -LiteralPath $name.FullName -NewName $newName
        }
    }
    

    首先,您必须只检查文件而不是文件夹。因为一旦重命名文件夹,当您递归到不存在的文件夹名称(已更改的文件夹名称)时,将不再找到文件。

    如果您还需要重命名文件夹。由于文件夹名称可能会更改,因此需要做更多工作。

    希望对你有所帮助。

    【讨论】:

    • 它现在似乎真的可以工作了。但我不明白为什么。是因为 -LiteralPath 吗?对于测试用例,我将所有文件夹命名为没有任何特殊字符,因此文件夹不应该被重命名...
    • 不同之处在于我只重命名了文件Name 而不是FullName,它还包含路径(参见变量$newName)。如果这被重命名,它将不起作用。比如\\Server++1\File+1+.txt不能重命名,因为要同时重命名文件夹和文件...
    • 不客气!很高兴它帮助了你:) 不要忘记将其标记为已解决。
    【解决方案2】:

    如果文件名称相同,我的 PowerShell 不会在 Rename-Item cmdlet 上引发任何错误。但是你可以尝试使用-ErrorAction 0

    但是,这个 oneliner 对我有用:

    gci $myPath -r | % { Rename-Item  $_.FullName  ($_.FullName -replace('[\,\/\*\+\#\~\-\=\^\°\$\%\&\<\>\|]','')) }
    

    【讨论】:

    • 当我尝试这样做时,我的 PS 告诉我以下内容: Rename-Item :源路径和目标路径必须不同。
    • 你可以尝试使用Move-Item而不是rename-item
    • 我正在使用 PowerShell 4.0,如果我运行:Rename-Item .\foo.txt .\foo.txt,我不会收到任何错误。您使用的哪个版本会出现错误?
    • 我正在运行 PS 3.0。尝试移动而不是重命名会导致另一个错误,说一些“正在使用”的文件......无论如何@DarkLite1 解决了它,我现在很高兴:-)
    猜你喜欢
    • 2014-03-03
    • 2016-04-18
    • 2021-04-09
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多