递归文件重命名行为不正确

时间:2019-01-24 17:23:31

标签: powershell powershell-v2.0 powershell-v3.0

我试图在我的项目文件夹中的所有.ascx文件前加一个下划线。我写的Powershell是:

Get-ChildItem -Filter '*.ascx' -File -Recurse | Rename-Item -NewName {"_$($_.Name)"}

对于大多数文件,此操作已达到预期目的,但对于某些文件,它已在文件名前加上大量下划线。例如: MyDirectory / MySubDirectory1 / ____________________________________________________________________________________________________________________________________________________________________________ Filename.ascx

我不明白为什么会这样。我最初使用--whatif参数运行脚本,使用该参数的结果似乎是正确的。

我将注意力集中在终端上,我得到了许多以下例外:

Rename-Item : Could not find a part of the path.
At line:1 char:47
+ ... lter '*.ascx' -File -Recurse|Rename-Item -NewName {"_$($_.Name)"}
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\Users\MyUser...pportPanel.ascx:String) [Rename-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

2 个答案:

答案 0 :(得分:0)

尝试一下:

$files = Get-ChildItem -Path 'C:\Users\Muppet\Desktop\test' -Filter '*.ascx' -File -Recurse 

ForEach ($file in $files)
         { 
           $newname = "_" + $file.Name
           Rename-Item -Path $file -NewName $newname
         }

答案 1 :(得分:0)

我不知道如何创建多个下划线,这种情况不应出现在以下情况下:

Get-ChildItem -Filter '*.ascx' -File -Recurse|Rename-Item -NewName {"_{0}" -f $_.Name}

要修复下划线,请使用:

Get-ChildItem -Filter '__*.ascx' -File -Recurse|Rename-Item -NewName {$_.Name -replace '(?<=^_)_+'}