Traté de obtener robocopy en Windows 7 para generar un registro Unicode, ya que tengo archivos con caracteres Unicode. El comando que usé:
robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee
Archivo de la copia funciona y la salida en pantalla es correcta, el archivo de registro en sí solo contiene galimatías. Esto es independientemente de si uso el símbolo del sistema o el Powershell.
¿Lo que da? ¿Estoy haciendo algo mal?
Respuestas:
Error en XP27. Intenta bajar a XP26.
Parece ser un error en la
XP27
versión de RoboCopy (que viene con Windows 7).En la versión
XP26
(que viene con Windows Vista)/UNILOG
produce un archivo de registro Unicode perfectamente legible para mí.Si no tiene una copia de Vista, EasyRoboCopy también viene con la
XP26
versión. (En realidad, no he probado EasyRoboCopy en sí, solo lo extrajerobocopy.exe
de su archivo de configuración usandoWinRAR
).fuente
De un vistazo, diría que el archivo escrito por Robocopy mientras usa los interruptores
/UNILOG
y/TEE
contiene una marca de orden de byte little-endian UTF-16 seguida de un mecanografiado de terminal ISO-8859-1.Para hacerlo legible, hice lo siguiente en Ubuntu:
El archivo resultante coincide con lo que vi en el símbolo del sistema de Windows.
Lectura adicional: hombre
dd
, hombreiconv
, hombrecol
fuente
([System.Text.Encoding]::Unicode).GetString([System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding(28591), [System.Text.Encoding]::Unicode, ([System.Text.Encoding]::GetEncoding(28591)).GetBytes($_)))
Mirando la salida del archivo (binario) en Win7, la opción / UNILOG es inútil. Escribe el BODE UNICODE estándar (FFFE), pero luego escribe todos los caracteres estrechos, EXCEPTO para la línea de opciones (por ejemplo, / BYTES / S / COPY: DATS ...), que es unicode real. Después de eso, se vuelve de nuevo a caracteres ANSI, y es no UTF-8, o bien; es decir, si tiene un nombre de archivo con un carácter ancho en la ruta, se convierte en un '?' personaje.
Aparentemente no hay interés en arreglarlo desde MSFT, ya que ha sido así por algún tiempo, y tengo todas las actualizaciones.
fuente
Arreglé mis archivos de registro de Robocopy de formato Unicode ilegible en Windows (que fueron creados accidentalmente al agregar la salida normal de Robocopy a la salida Unicode de Out-File en PowerShell), de la siguiente manera:
En PowerShell:
¡El código anterior puede no funcionar para todos los tamaños de archivo!
(Crédito por el código: adapté el código de esta publicación de Ferdinand Prantl: Stackoverflow - Leer / analizar archivos binarios con PowerShell
fuente
Use la página de códigos UTF-8, luego ejecute el convertidor de winword
Si los nombres de archivo o directorio contienen caracteres Unicode, antes de emitir el comando Robocopy con el
/unilog
parámetro, use elchcp 65001
comando. (La página de códigos 65001 es UTF-8 .)Una vez que tenga el registro Unicode destrozado, simplemente ábralo en MS Word como
Unicode (UTF-8)
y guárdelo:fuente
En su caso, el comando en Powershell es algo así:
La solución alternativa es que use Out-File en lugar del parámetro incorporado / unilog. Obtendrá exactamente el mismo archivo de registro, pero ahora se escribirá correctamente en Unicode.
fuente
Ejecute el
chcp
comando antes del comando robocopy, con la página de códigos correcta.para UTF-8 (no funciona con robocopy y hebreo y tal vez más idiomas):
para hebreo:
Lista completa de páginas de códigos: https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
fuente