我正在尝试做一个简单的批量文件重命名,以从文件名的开头删除非标准字符(例如“ 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时,我遇到相同的问题
答案 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