Использование Powershells Trimstart для удаления массива символов из имени файла - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сделать простое переименование файла, чтобы удалить нестандартные символы (например, "0123456789-_.") Из начала имени файла и просто добавить строку к имени файла.

например, '12 -_myfilename.doc' станет '012345 - myfilename.doc'

... где 012345 - это номер моего исследования.Я попытался использовать приведенный ниже сценарий, но продолжаю получать следующую ошибку при переходе по сценарию, выполняющему строку trimstart ...

"'Name' является свойством ReadOnly"

Iдумаю, это не проблема тримстарта, а способ, которым я пытаюсь получить из него результат.

Любая помощь приветствуется.

Соответствующая часть кода выглядит следующим образом ....

$MyFileObject=0
if ($MyRecursiveFlag) {
Get-ChildItem $MyStudyPath -recurse | where {$_.extension -in ".xls",”.xlsx”,".xslt",".pdf",".doc",".docx",".xlsm",".xml",".htm",".ppt"}|
ForEach-Object{

    #Check if start of the file is compliant
    $mymatch = [Regex]::Match($_, '\d{5}\s-\s')
    if ($mymatch.Success){
        #Already renamed correctly so nothing else to do
        Write-Host "Okay - no changes $($_.Name)" -ForegroundColor Green
    } else {
        #No, it's not compliant so let's remove any preceding numbers, spaces and dashes etc
        $MyFileObject = $_
        $MyFileObject.Name = $MyFileObject.Name.trimstart(" 0123456789-_.")
        #...and rename the file
        Rename-Item -LiteralPath $MyFileObject.FullName -NewName "$($MyStudyNumber + ' - ' + $MyFileObject.Name)"
        Write-Host "Renamed to $($MyFileObject.Name)" -ForegroundColor Yellow
    }
}

}

У меня та же проблема при использовании Windows 7 PowerShell v3 и 5.1

1 Ответ

0 голосов
/ 15 ноября 2018

Вы не можете изменить Name текущего Get-ChildItem объекта (в вашем случае $MyFileObject).

Это должно работать (часть вашего сценария):

$MyFileObject = $_
$FileName = $MyFileObject.Name.trimstart(" 0123456789-_.")

#...and rename the file
Rename-Item -LiteralPath $MyFileObject.FullName -NewName "$($MyStudyNumber + ' - ' + $FileName)"
Write-Host "Renamed to $FileName" -ForegroundColor Yellow
...