Robocopy 유니 로그 출력이 횡설수설 /tee 복사가 작동하고 화면 출력이 올 바르면 로그

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

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

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

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



답변

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

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

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

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


답변

한눈에, /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


답변

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

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


답변

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을 가진 읽기 / 구문 분석 이진 파일 – 유래


답변

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

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

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


답변

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

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

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


답변

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