Tentei obter robocopy no Windows 7 para gerar um log Unicode, pois tenho arquivos com caracteres Unicode. O comando que eu usei:
robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee
O arquivo em que a cópia funciona e a saída na tela está correta, o próprio arquivo de log contém apenas sem sentido. Independentemente de eu usar o prompt de comando ou o Powershell.
O que da? Estou fazendo algo errado?
Respostas:
Bug no XP27. Tente fazer o downgrade para o XP26.
Parece ser um bug na
XP27
versão do RoboCopy (que acompanha o Windows 7).Na versão
XP26
(que acompanha o Windows Vista)/UNILOG
produz um arquivo de log Unicode perfeitamente legível para mim.Se você não possui uma cópia do Vista, o EasyRoboCopy também vem com a
XP26
versão. (Na verdade, eu não tentei o EasyRoboCopy, apenas extraírobocopy.exe
o arquivo de instalação usandoWinRAR
.)fonte
À primeira vista, eu diria que o arquivo escrito por Robocopy ao usar as opções
/UNILOG
e/TEE
contém uma marca de pedido de bytes UTF-16 little-endian seguida por um terminal ISO-8859-1.Para torná-lo legível, fiz o seguinte no Ubuntu:
O arquivo resultante corresponde ao que vi no prompt de comando do Windows.
Leitura adicional: man
dd
, maniconv
, mancol
fonte
([System.Text.Encoding]::Unicode).GetString([System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding(28591), [System.Text.Encoding]::Unicode, ([System.Text.Encoding]::GetEncoding(28591)).GetBytes($_)))
Observando a saída do arquivo (binário) no Win7, a opção / UNILOG é inútil. Ele grava a BOM UNICODE padrão (FFFE), mas depois escreve todos os caracteres restritos, EXCETO para a linha de opções (por exemplo, / BYTES / S / COPY: DATS ...), que é unicode real. Depois disso, ele retorna aos caracteres ANSI e também não é UTF-8; ou seja, se você tiver um nome de arquivo com um caractere amplo no caminho, ele será convertido em um estreito '?' personagem.
Aparentemente, não há interesse em corrigi-lo do MSFT, já que tem sido assim há algum tempo, e eu tenho todas as atualizações.
fonte
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 de saída de arquivo externo no PowerShell), da seguinte maneira:
No PowerShell:
O código acima pode não funcionar para todos os tamanhos de arquivo!
(Crédito pelo código: adaptei o código desta postagem por Ferdinand Prantl: Stackoverflow - Ler / analisar arquivos binários com o PowerShell
fonte
Use a página de código UTF-8 e execute o conversor do winword
Se os nomes de arquivos ou diretórios contiverem caracteres Unicode, antes de emitir o comando Robocopy com o
/unilog
parâmetro, use ochcp 65001
comando (A página de códigos 65001 é UTF-8 .)Depois de ter o log Unicode desconfigurado, basta abri-lo no MS Word como
Unicode (UTF-8)
e salve-o:fonte
No seu caso, o comando no Powershell é mais ou menos assim:
A solução alternativa é usar o arquivo externo em vez do parâmetro interno / unilog. Você obterá exatamente o mesmo arquivo de log, mas agora ele será gravado corretamente em unicode.
fonte
Execute o
chcp
comando antes do comando robocopy, com a página de código correta.para UTF-8 (não funciona com robocopy e hebraico e talvez mais idiomas):
para hebraico:
Lista de páginas de códigos completa: https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
fonte