Рекурсивное переименование файла ведет себя некорректно - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь префикс всех файлов .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 голосов
/ 24 января 2019

Я не знаю как вы создали несколько подчеркиваний, это не должно происходить с:

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

Для восстановления подчеркивания используйте:

Get-ChildItem -Filter '__*.ascx' -File -Recurse|Rename-Item -NewName {$_.Name -replace '(?<=^_)_+'}
0 голосов
/ 24 января 2019

Попробуйте это:

$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
         }
...