使用Powershells Trimstart从文件名中删除字符数组

时间:2018-11-15 13:24:29

标签: powershell trim readonly

我正在尝试做一个简单的批量文件重命名,以从文件名的开头删除非标准字符(例如“ 0123456789-_。”),并在文件名中添加一个字符串。

例如'12 -_myfilename.doc'将变为'012345-myfilename.doc'

...其中012345是我的学习编号。我已经尝试过使用以下脚本,但是在逐步执行执行trimstart行的脚本时仍会遇到以下错误...

“'名称'是只读”属性”

我想这不是一个修整问题,而是我尝试从中收集结果的方式。

任何帮助表示赞赏。

代码的相关部分看起来像...

$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 :(得分:3)

您不能更改当前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