Dưới đây là một ví dụ về tập lệnh PowerShell. Nó tìm trong C:
đường dẫn cho bất kỳ tệp nào có 3 byte đầu tiên 0xEF, 0xBB, 0xBF
.
Function ContainsBOM
{
return $input | where {
$contents = [System.IO.File]::ReadAllBytes($_.FullName)
$_.Length -gt 2 -and $contents[0] -eq 0xEF -and $contents[1] -eq 0xBB -and $contents[2] -eq 0xBF }
}
get-childitem "C:\*.*" | where {!$_.PsIsContainer } | ContainsBOM
Có cần thiết phải "ReadAllBytes" không? Có lẽ chỉ đọc một vài byte đầu tiên sẽ hoạt động tốt hơn?
Điểm công bằng. Đây là một phiên bản cập nhật chỉ đọc 3 byte đầu tiên.
Function ContainsBOM
{
return $input | where {
$contents = new-object byte[] 3
$stream = [System.IO.File]::OpenRead($_.FullName)
$stream.Read($contents, 0, 3) | Out-Null
$stream.Close()
$contents[0] -eq 0xEF -and $contents[1] -eq 0xBB -and $contents[2] -eq 0xBF }
}
get-childitem "C:\*.*" | where {!$_.PsIsContainer -and $_.Length -gt 2 } | ContainsBOM