A saída unilog do Robocopy é sem sentido

8

Eu tentei obter o robocopy no Windows 7 para gerar um log Unicode, já que tenho arquivos com caracteres Unicode. O comando que usei:

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

Arquive a cópia e a saída na tela está correta, o próprio arquivo de log contém apenas conteúdo sem sentido. Isso é independente se eu uso o prompt de comando ou o Powershell.

O que dá? Estou fazendo algo errado?

    
por miro 12.06.2011 / 00:57

6 respostas

5

Bug no XP27. Tente fazer downgrade para o XP26.

Parece ser um bug na versão XP27 do RoboCopy (que vem com o Windows 7).

Na versão XP26 (que vem com o Windows Vista) /UNILOG produz um arquivo de log Unicode perfeitamente legível para mim.

Se você não tiver uma cópia do Vista em torno de EasyRoboCopy também vem com a versão XP26 . (Eu não tentei o EasyRoboCopy propriamente dito, apenas extraí o robocopy.exe do seu arquivo de configuração usando WinRAR .)

    
por 23.06.2012 / 07:15
2

De relance, eu diria que o arquivo escrito pelo Robocopy enquanto estiver usando as opções /UNILOG e /TEE contém uma marca de ordem de byte UTF-16 little-endian seguida por um datacorte de terminal ISO-8859-1. / p>

Para torná-lo legível, fiz o seguinte no 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

O arquivo resultante corresponde ao que vi no prompt de comando do Windows.

Outras leituras: man dd , man < href="https://www.freebsd.org/cgi/man.cgi?query=iconv"> iconv , homem col

    
por 18.04.2013 / 06:05
1

Olhando para a saída do arquivo (binário) no Win7, a opção / UNILOG é inútil. Ele grava o padrão UNICODE BOM (FFFE), mas depois escreve todos os caracteres estreitos EXCETO para a linha de opções (por exemplo, / BYTES / S / COPY: DATS ...), que é unicode real . Depois disso, ele volta para os caracteres ANSI e não é ; ou seja, se você tiver um nome de arquivo com um caractere amplo no caminho, ele será convertido em um '? personagem.

Aparentemente, não há interesse em corrigi-lo da MSFT, já que é assim há algum tempo, e tenho todas as atualizações.

    
por 08.06.2013 / 00:13
1

Corrigi meus arquivos de log Robocopy ilegíveis no formato Unicode no Windows (que foram criados acidentalmente anexando a saída normal do Robocopy à saída Unicode do Out-File no PowerShell), da seguinte forma:

No 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

O código acima pode não funcionar para todos os tamanhos de arquivo!

(Crédito por código: eu adaptei o código deste post por Ferdinand Prantl: Stackoverflow - Ler / analisar arquivos binários com o PowerShell

    
por 03.04.2015 / 16:53
1

Use a página de códigos UTF-8 e execute o conversor winword

Se os nomes de arquivos ou diretórios contiverem caracteres Unicode, antes de emitir o comando Robocopy com o parâmetro /unilog , use o comando chcp 65001 . (Página de código 65001 é UTF-8 .)

Depois de ter o log Unicode desconfigurado, basta abri-lo no MS Word como Unicode (UTF-8) e salvá-lo:

    
por 05.04.2015 / 03:53
0

No seu caso, o comando no Powershell é mais ou menos assim:

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

A solução é usar o Out-File em vez do parâmetro built-in / unilog. Você obterá exatamente o mesmo arquivo de log, mas agora será escrito corretamente em unicode.

    
por 12.09.2012 / 10:50