2012-10-12 42 views
5

Câu hỏi này đang được tiếp tục đến another question about selectively appending lines from one file to another.Dòng lệnh/vỏ lệnh của Windows - loại bỏ UTF-8 BOM

Regex mà tôi đang sử dụng hoạt động tốt khi khớp với các dòng để giữ/hủy. Vấn đề là tệp được tạo từ một loạt các tệp khác và đôi khi dòng tôi muốn bắt đầu là dòng đầu tiên của tệp được mã hóa UTF-8. Điều này có nghĩa rằng findstr lệnh trở về một cái gì đó như:

LineToKeep that started out as the first line in its file 
LineToKeep another 
LineToKeep more lines 
LineToKeep that started out as the first line in its file 
LineToKeep more 

Nó đảm bảo rằng ngoại trừ các byte BOM, dòng sẽ luôn luôn bắt đầu bằng "LineToKeep". Làm thế nào tôi có thể loại bỏ ba byte UTF-8 BOM đó, vì các lệnh này có thể không xử lý chúng đúng cách?

Tôi đang hy vọng tìm cách xóa chúng tại chỗ hoặc có thể sửa đổi lệnh findstr từ câu hỏi trước đó.

Vì tôi biết mỗi dòng phải bắt đầu bằng "LineToKeep" hoặc "∩╗┐LineToKeep", tôi tính có cách để tính toán một cái gì đó như if (Line[3:10] == "LineToKeep") { Line = Line[3:]; } cho mỗi dòng.

+1

..và đây là lý do tại sao perl nên giao hàng với mọi hệ điều hành ;-) –

+0

Bạn có nghĩ đến việc sử dụng Powershell thay vì trình thông dịch lệnh vanilla không? Làm một cái gì đó như thế này sẽ là tầm thường. Vỏ Windows không giống Unicode nhiều. – kprobst

+0

Tôi sẽ chạy tập lệnh trong các sự kiện trước/sau xây dựng của Visual Studio. Theo http://stackoverflow.com/questions/6500320/post-build-event-execute-powershell, việc chạy tập lệnh PowerShell có thể là một tùy chọn. Nó sẽ cảm thấy giống như một giải pháp bên ngoài mặc dù. – Kache

Trả lời

1

tôi đã kết thúc gọi PowerShell trong cửa sổ cmd:

powershell . "Get-ChildItem . | Select-String '^LineToKeep' | foreach {$_.Line}" 
Các vấn đề liên quan