我正在尝试将包含日语字符的大型dat文件转换为UTF-8格式,以便将它们加载到数据库中。最大的文件大小为17 GB,整个目录大小为34 GB。以下是我的PowerShell脚本。
$files = Get-ChildItem 'E:\datamig_bkp_SCMDB\data\bigfiles' -Recurse |
? {Test-Path $_.FullName -PathType Leaf}
foreach ($file in $files) {
$content = Get-Content $file.FullName
$content | Out-File $file.FullName -Encoding UTF8
}
我遇到以下错误:
Get-Content: 抛出了“System.OutOfMemoryException”类型的异常。 在第3行第16个字符处: + $content = Get-Content $file.FullName + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : 无效操作: (:) [Get-Content],OutOfMemoryException + FullyQualifiedErrorId : ProviderContentReadError,Microsoft.PowerShell.Commands.GetContentCommand
Where-Object
,使用-File
开关更易读。您还可以将FileInfo
对象直接传递到Get-Content
。 - Maximilian Burszley-File
是在PowerShell v3中引入的。我更喜欢保持向后兼容性,因此我倾向于避免较新的功能,除非问题说明用户正在运行足够新的版本。至于将文件对象传递到Get-Content
中:我没有看到优势,因为每个文件应该单独处理,并且移动临时文件后删除原始文件需要完整路径。我不确定FileInfo
对象中的信息是否会在删除文件后保留,因此我采取了安全的方法。 - Ansgar WiechersFileInfo
对象在项本身被删除后仍保留为FYI。$_ | Get-Content | Out-File -FilePath $tmp -Encoding utf8
等等。 - Maximilian Burszley