Robocopy unilog output ไม่มีความหมาย


10

ฉันพยายามรับ robocopy ใน Windows 7 เพื่อสร้างบันทึก Unicode เนื่องจากฉันมีไฟล์ที่มีอักขระ Unicode คำสั่งที่ฉันใช้:

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

ไฟล์งานคัดลอกและเอาท์พุทบนหน้าจอถูกต้องไฟล์บันทึกตัวเองเพียงแค่มีความหมายซึ่ง สิ่งนี้ไม่ว่าฉันจะใช้พรอมต์คำสั่งหรือ PowerShell

สิ่งที่ช่วยให้? ฉันกำลังทำอะไรผิดหรือเปล่า?


นี่เป็นประสบการณ์ของฉันด้วย คุณหาทางออกหรือไม่?
André Caron

คำตอบ:


6

ข้อผิดพลาดใน XP27 ลองปรับลดรุ่นเป็น XP26

ดูเหมือนจะเป็นข้อบกพร่องในXP27รุ่น RoboCopy (ซึ่งมาพร้อมกับ Windows 7)

ในเวอร์ชั่นXP26(ซึ่งมาพร้อมกับ Windows Vista) /UNILOGจะสร้างไฟล์บันทึก Unicode ที่สามารถอ่านได้อย่างสมบูรณ์สำหรับฉัน

หากคุณไม่มีสำเนาของ Vista วางรอบEasyRoboCopyก็มาพร้อมกับXP26รุ่น (ฉันไม่ได้ลอง EasyRoboCopy จริงๆแล้วเพิ่งrobocopy.exeแตกไฟล์การตั้งค่าโดยใช้WinRAR)


2

ฉันจะบอกว่าไฟล์ที่เขียนโดย Robocopy ในขณะที่ใช้/UNILOGและ/TEEสวิตช์มีเครื่องหมายลำดับไบต์เล็ก ๆ น้อย ๆ UTF-16 ตามด้วยเทอร์มินัล ISO-8859-1

เพื่อให้สามารถอ่านได้ฉันได้ทำสิ่งต่อไปนี้ใน 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

ไฟล์ผลลัพธ์ตรงกับที่ฉันเห็นในพรอมต์คำสั่ง Windows

อ่านเพิ่มเติม:ชายddคนiconvชายcol


มีวิธีใดที่จะทำการแปลงที่คล้ายกันใน windows ฉันได้ลองใช้การแปลงในท่อใน PowerShell แล้ว แต่ไม่ประสบความสำเร็จ:([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

งานนี้ !!!!!
Corey

1

ดูที่ไฟล์เอาต์พุต (ไบนารี) บน Win7 ตัวเลือก / UNILOG นั้นไม่มีประโยชน์ มันเขียน BOM UNICODE มาตรฐาน (FFFE) แต่จากนั้นจะเขียนตัวอักษรแคบทั้งหมดยกเว้นบรรทัดตัวเลือก (เช่น / BYTES / S / COPY: DATS ... ) ซึ่งเป็นยูนิโค้ดจริง หลังจากนั้นจะเปลี่ยนกลับเป็น ANSI chars และไม่ใช่ UTF-8 เช่นกัน เช่นถ้าคุณมีชื่อไฟล์ที่มีตัวอักษรกว้างในเส้นทางมันจะถูกแปลงเป็น '' 'ที่แคบ ตัวละคร

เห็นได้ชัดว่าไม่มีความสนใจในการแก้ไขจาก MSFT เนื่องจากเป็นเช่นนี้มาระยะหนึ่งแล้วและฉันมีการอัปเดตทั้งหมด


ไม่มีสิ่งเช่น "การเข้ารหัส Unicode ที่เกิดขึ้นจริง" คุณหมายถึง UTF-16 / UCS-2 หรือเปล่า มันเป็นความผิด MS บูตสำหรับการตั้งชื่อนี้ "unilog" ในสถานที่แรก ...
นา Banov

1

ฉันแก้ไขไฟล์บันทึก Robocopy ในฟอร์แมต Unicode ที่อ่านไม่ได้ใน Windows (ซึ่งถูกสร้างขึ้นโดยไม่ได้ตั้งใจโดยต่อท้ายเอาต์พุต Robocopy ปกติไปยังเอาต์พุต Unicode จาก Out-File ใน PowerShell) ดังนี้:

ใน 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

รหัสด้านบนอาจใช้ไม่ได้กับไฟล์ทุกขนาด!

(เครดิตสำหรับรหัส: ฉันปรับรหัสจากโพสต์นี้โดย Ferdinand Prantl: Stackoverflow - อ่าน / แยกวิเคราะห์ไฟล์ไบนารีด้วย PowerShell


ใช้งานได้หากเอาต์พุตไม่มีอักขระ Unicode มิฉะนั้นอักขระเหล่านั้นจะถูกแปลงเป็น ASCII
curropar

1

ใช้หน้ารหัส UTF-8 จากนั้นเรียกใช้ตัวแปลง winword

หากชื่อไฟล์หรือไดเรกทอรีของคุณมีอักขระ Unicode ดังนั้นก่อนที่จะออกคำสั่ง Robocopy พร้อม/unilogพารามิเตอร์ให้ใช้chcp 65001คำสั่ง (รหัสหน้า65001 คือ UTF-8 )

เมื่อคุณมีบันทึก Unicode mangled เพียงเปิดขึ้นใน MS Word เป็นUnicode (UTF-8)และบันทึก:

กล่องโต้ตอบการแปลงไฟล์ MS Word


0

ในกรณีของคุณคำสั่งใน Powershell มีลักษณะดังนี้:

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

วิธีแก้ปัญหาคือคุณใช้ Out-File แทนพารามิเตอร์ built-in / unilog คุณจะได้รับไฟล์บันทึกเดียวกัน แต่ตอนนี้มันจะถูกเขียนอย่างถูกต้องในยูนิโค้ด


4
แน่นอนว่ามันจะเป็น Unicode แต่จะไม่มีอักขระ Unicode พิเศษ มันเป็นเพียงแค่เอาต์พุต ASCII ที่แปลเป็นยูนิโค้ด
Davor Josipovic

0

รันchcpคำสั่งก่อนคำสั่ง robocopy พร้อมกับโค้ดเพจที่ถูกต้อง

สำหรับ UTF-8 (ไม่ทำงานกับ robocopy & ภาษาฮิบรูและภาษาอื่น ๆ ):

chcp 65001 | Out-Null

สำหรับภาษาฮิบรู:

chcp 1255 | Out-Null 

รายการหน้ารหัสเต็ม: https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.