Я попытался получить robocopy в Windows 7 для создания журнала Unicode, так как у меня есть файлы с символами Unicode. Команда, которую я использовал:
robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee
Файл копии работает, и вывод на экран правильный, сам файл журнала просто содержит бред. Это независимо от того, использую ли я командную строку или Powershell.
Что дает? Я делаю что-то неправильно?
Ответы:
Ошибка в XP27. Попробуйте понизиться до XP26.
Кажется, это ошибка в
XP27
версии RoboCopy (которая поставляется с Windows 7).В версии
XP26
(которая поставляется с Windows Vista)/UNILOG
производит отлично читаемый файл журнала Unicode для меня.Если у вас нет копии Vista, лежащая вокруг EasyRoboCopy, также поставляется с
XP26
версией. (Я на самом деле не пробовал EasyRoboCopy, просто извлекrobocopy.exe
его из установочного файла, используяWinRAR
.)источник
На первый взгляд, я бы сказал , что файл написан Robocopy , а с помощью
/UNILOG
и/TEE
переключателей содержит мало-младшему метку порядка байтов UTF-16 , за которым следует терминала машинописи ISO-8859-1.Чтобы сделать его читабельным, я сделал в Ubuntu следующее:
Полученный файл соответствует тому, что я видел в командной строке Windows.
Дальнейшее чтение: мужчина
dd
, мужчинаiconv
, мужчинаcol
источник
([System.Text.Encoding]::Unicode).GetString([System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding(28591), [System.Text.Encoding]::Unicode, ([System.Text.Encoding]::GetEncoding(28591)).GetBytes($_)))
Если посмотреть на вывод (двоичного) файла на Win7, опция / UNILOG бесполезна. Он записывает стандартную UNICODE BOM (FFFE), но затем переписывает все узкие символы, КРОМЕ для строки параметров (например, / BYTES / S / COPY: DATS ...), которая является фактическим Unicode. После этого, он возвращается к ANSI символов, и это не UTF-8, либо; то есть, если у вас есть имя файла с широким символом в пути, оно преобразуется в узкий '?' персонаж.
По-видимому, нет никакого интереса к исправлению этого из MSFT, так как это было в течение некоторого времени, и у меня есть все обновления.
источник
Я исправил свои нечитаемые файлы журнала Robocopy в формате Unicode в Windows (которые были случайно созданы путем добавления нормального вывода Robocopy к выводу Unicode из Out-File в PowerShell) следующим образом:
В PowerShell:
Приведенный выше код может работать не для всех размеров файлов!
(Кредит за код: я адаптировал код из этого поста от Фердинанда Прантля: Stackoverflow - чтение / анализ двоичных файлов с помощью PowerShell
источник
Используйте кодовую страницу UTF-8, затем запустите конвертер winword
Если ваши имена файлов или каталогов содержат символы Unicode, то перед выполнением команды Robocopy с
/unilog
параметром используйтеchcp 65001
команду. (Кодовая страница 65001 - UTF-8 .)Как только вы получите искаженный журнал Unicode, просто откройте его в MS Word
Unicode (UTF-8)
и сохраните:источник
В вашем случае команда в Powershell выглядит примерно так:
Обходной путь заключается в том, что вы используете Out-File вместо встроенного параметра / unilog. Вы получите точно такой же файл журнала, но теперь он будет правильно записан в юникоде.
источник
Выполните
chcp
команду перед командой robocopy с правильной кодовой страницей.для UTF-8 (не работает с robocopy и ивритом и, возможно, с другими языками):
для иврита:
Полный список кодовых страниц: https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
источник