Robocopy 유니 로그 출력이 횡설수설


10

유니 코드 문자가있는 파일이 있기 때문에 유니 코드 로그를 생성하기 위해 Windows 7에서 robocopy를 얻으려고했습니다. 내가 사용한 명령 :

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

복사가 작동하고 화면 출력이 올 바르면 로그 파일 자체에 횡설수설이 포함됩니다. 이것은 명령 프롬프트를 사용하는지 아니면 Powershell을 사용하는지에 관계없이입니다.

무엇을 제공합니까? 내가 뭔가 잘못하고 있습니까?


이것은 또한 나의 경험이다. 해결책을 찾았습니까?
André Caron

답변:


6

XP27의 버그. XP26으로 다운 그레이드하십시오.

XP27RoboCopy 버전 (Windows 7과 함께 제공됨) 의 버그 인 것 같습니다.

XP26Windows Vista와 함께 제공되는 버전에서는 /UNILOG완벽하게 읽을 수있는 유니 코드 로그 파일이 생성됩니다.

EasyRoboCopy 를 둘러싼 Vista 사본이없는 경우 XP26버전 도 함께 제공됩니다 . (실제로 EasyRoboCopy 자체를 시도하지 않고을 robocopy.exe사용하여 설정 파일에서 추출 했습니다 WinRAR.)


2

한눈에, /UNILOGand /TEE스위치 를 사용하는 동안 Robocopy가 작성한 파일 에는 UTF-16 리틀 엔디안 바이트 순서 마크와 ISO-8859-1 터미널 유형 스크립트가 포함되어 있다고합니다.

읽을 수 있도록 우분투에서 다음을 수행했습니다.

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 명령 프롬프트에서 본 것과 일치합니다.

더 읽을 거리 : man dd, man iconv, mancol


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 옵션은 쓸모가 없습니다. 표준 UNICODE BOM (FFFE)을 작성하지만 실제 유니 코드 인 옵션 행 (예 : / BYTES / S / COPY : DATS ...)에 대해 모든 좁은 문자를 제외 하고 계속 작성합니다 . 그 후에는 ANSI 문자로 되돌리고 UTF-8도 아닙니다 . 즉, 경로에 넓은 문자가있는 파일 이름이 있으면 좁은 '?'로 변환됩니다. 캐릭터.

한동안 이런 식으로 있었기 때문에 MSFT에서 수정하는 데 관심이 없으며 모든 업데이트가 있습니다.


"실제 유니 코드"인코딩과 같은 것은 없습니다. UTF-16 / UCS-2을 의미 했습니까? 이 "유니 로그"의 이름을 먼저 지정하여 부팅하는 것은 MS의 잘못입니다.
Nas Banov

1

Windows에서 읽을 수없는 유니 코드 형식의 Robocopy 로그 파일을 수정했습니다 (실수로 Robocopy 출력을 PowerShell의 Out-File에서 유니 코드 출력에 추가하여 생성되었습니다).

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

위 코드는 모든 파일 크기에서 작동하지 않을 수 있습니다!

: 코드 (신용 :이 페르디난드 Prantl에 의해 게시물에서 코드를 적용 PowerShell을 가진 읽기 / 구문 분석 이진 파일 - 유래


출력에 유니 코드 문자가 포함되어 있지 않은 경우 작동합니다. 그렇지 않으면 해당 문자가 ASCII로 변환됩니다.
curropar

1

UTF-8 코드 페이지를 사용한 다음 winword converter를 실행하십시오.

파일 또는 디렉토리 이름에 유니 코드 문자가 포함 된 경우 Robocopy 명령을 /unilog매개 변수 와 함께 발행하기 전에 명령을 사용하십시오 chcp 65001. (코드 페이지 65001은 UTF-8 입니다.)

엉망인 유니 코드 로그가 있으면 MS Word에서 다음 Unicode (UTF-8)과 같이 열어서 저장하십시오.

MS Word 파일 변환 대화 상자


0

귀하의 경우 Powershell의 명령은 다음과 같습니다.

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

해결 방법은 내장 / unilog 매개 변수 대신 Out-File을 사용하는 것입니다. 정확히 동일한 로그 파일을 얻을 수 있지만 이제는 유니 코드로 올바르게 작성됩니다.


4
물론 유니 코드이지만 특수한 유니 코드 문자는 없습니다. 유니 코드로 변환 된 ASCII 출력 일뿐입니다.
Davor Josipovic

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.