Robocopy unilog output là vô nghĩa


10

Tôi đã cố gắng lấy bản sao trong Windows 7 để tạo nhật ký Unicode, vì tôi có các tệp có ký tự Unicode. Lệnh tôi đã sử dụng:

robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee

Tệp bản sao hoạt động và đầu ra trên màn hình là chính xác, bản thân tệp nhật ký chỉ chứa vô nghĩa. Điều này là bất kể tôi sử dụng Dấu nhắc Lệnh hay Powershell.

Đưa cái gì? Tôi có làm điều gì sai?


Đây cũng là kinh nghiệm của tôi. Bạn đã tìm thấy một giải pháp?
André Caron

Câu trả lời:


6

Lỗi trong XP27. Hãy thử hạ cấp xuống XP26.

Nó dường như là một lỗi trong XP27phiên bản RoboCopy (đi kèm với Windows 7).

Trong phiên bản XP26(đi kèm với Windows Vista) /UNILOGtạo ra tệp nhật ký Unicode hoàn toàn dễ đọc cho tôi.

Nếu bạn không có bản sao Vista nằm xung quanh EasyRoboCopy cũng đi kèm với XP26phiên bản. (Tôi thực sự chưa thử EasyRoboCopy, chỉ cần trích xuất robocopy.exera khỏi tệp thiết lập của nó bằng cách sử dụng WinRAR.)


2

Nhìn thoáng qua, tôi muốn nói rằng tệp được viết bởi Robocopy trong khi sử dụng các công tắc /UNILOGvà các /TEEcông tắc chứa một dấu thứ tự byte cuối nhỏ UTF-16 theo sau là một bản in thiết bị đầu cuối ISO-8859-1.

Để làm cho nó dễ đọc, tôi đã làm như sau trong Ubuntu:

dd if=robocopy.log ibs=1 skip=2 obs=512        | # Strip the byte order mark
  iconv --from-code ISO-8859-1 --to-code UTF-8 | # Convert to UTF-8
  col -b > robocopy_utf-8.log                    # Interpret control characters

Tệp kết quả khớp với những gì tôi thấy trong dấu nhắc lệnh của Windows.

Đọc thêm: người đàn ông dd, người đàn ông iconv, người đàn ôngcol


Bất kỳ cách nào để thực hiện chuyển đổi tương tự trong các cửa sổ? Tôi đã thử chuyển đổi này trong đường ống trong PowerShell, nhưng không thành công:([System.Text.Encoding]::Unicode).GetString([System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding(28591), [System.Text.Encoding]::Unicode, ([System.Text.Encoding]::GetEncoding(28591)).GetBytes($_)))
Davor Josipovic

Những công việc này!!!!!
Corey

1

Nhìn vào đầu ra tệp (nhị phân) trên Win7, tùy chọn / UNILOG là vô dụng. Nó viết BOM UNICODE tiêu chuẩn (FFFE), nhưng sau đó tiến hành viết tất cả các ký tự hẹp NGOẠI TRỪ cho dòng tùy chọn (ví dụ: / BYTES / S / COPY: DATS ...), đó là unicode thực tế. Sau đó, nó trở lại ký tự ANSI và nó cũng không phải là UTF-8; tức là, nếu bạn có một tên tệp có ký tự rộng trong đường dẫn, nó được chuyển đổi thành một '?' hẹp tính cách.

Rõ ràng không có hứng thú với việc sửa nó từ MSFT, vì nó đã xảy ra theo cách này một thời gian và tôi có tất cả các bản cập nhật.


Không có thứ gọi là mã hóa "unicode thực tế". Ý bạn là UTF-16 / UCS-2? Đó là lỗi MS khi khởi động để đặt tên cho "unilog" này ở vị trí đầu tiên ...
Nas Banov

1

Tôi đã sửa các tệp nhật ký Robocopy định dạng Unicode không thể đọc được của mình trong Windows (được tạo ngẫu nhiên bằng cách nối thêm đầu ra Robocopy bình thường vào đầu ra Unicode từ Out-File trong PowerShell), như sau:

Trong PowerShell:

$bytes = [System.IO.File]::ReadAllBytes('C:\Temp\RoboCopyLog.txt')
$len = $bytes.Length
#Remove the Unicode BOM, and convert to ASCII
$text = [System.Text.Encoding]::ASCII.GetString($bytes,2,$len -2)
$text

Các mã trên có thể không hoạt động cho tất cả các kích cỡ tập tin!

(Tín dụng cho mã: Tôi đã điều chỉnh mã từ bài đăng này của Ferdinand Prantl: Stackoverflow - Đọc / Phân tích tệp nhị phân với PowerShell


Điều này hoạt động nếu đầu ra không chứa các ký tự Unicode; mặt khác, các ký tự đó được chuyển đổi thành ASCII.
curropar

1

Sử dụng trang mã UTF-8, sau đó chạy trình chuyển đổi winword

Nếu tên tệp hoặc thư mục của bạn chứa các ký tự Unicode thì trước khi ban hành lệnh Robocopy với /unilogtham số, hãy sử dụng chcp 65001lệnh. (Mã trang 65001 là UTF-8 .)

Khi bạn có bản ghi Unicode được đọc sai, chỉ cần mở nó trong MS Word Unicode (UTF-8)và lưu nó:

Hộp thoại chuyển đổi tệp MS Word


0

Trong trường hợp của bạn, lệnh trong Powershell sẽ giống như thế này:

robocopy C:\mysource D:\mydest /mir | Out-File backup.log

Cách giải quyết là bạn sử dụng Out-File thay vì tham số tích hợp / unilog. Bạn sẽ nhận được chính xác cùng một tệp nhật ký, nhưng bây giờ nó sẽ được viết đúng bằng unicode.


4
Chắc chắn nó sẽ là unicode, nhưng sẽ không có ký tự unicode đặc biệt. Nó chỉ là đầu ra ASCII được dịch sang unicode.
Davor Josipovic

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.