Saya mencoba mendapatkan robocopy di Windows 7 untuk menghasilkan log Unicode, karena saya memiliki file dengan karakter Unicode. Perintah yang saya gunakan:
robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee
File copy berfungsi dan output pada layar sudah benar, file log itu sendiri hanya berisi omong kosong. Ini terlepas dari apakah saya menggunakan Command Prompt atau Powershell.
Apa yang menyebabkannya? Apakah saya melakukan sesuatu yang salah?
Jawaban:
Bug di XP27. Coba turunkan ke XP26.
Tampaknya ada bug di
XP27
versi RoboCopy (yang dilengkapi dengan Windows 7).Dalam versi
XP26
(yang dilengkapi dengan Windows Vista)/UNILOG
menghasilkan file log Unicode yang mudah dibaca bagi saya.Jika Anda tidak memiliki salinan Vista EasyRoboCopy juga dilengkapi dengan
XP26
versi. (Saya belum benar-benar mencoba EasyRoboCopy sendiri, baru saja diekstrakrobocopy.exe
keluar dari file pengaturannya menggunakanWinRAR
.)sumber
Sekilas, saya akan mengatakan file yang ditulis oleh Robocopy saat menggunakan
/UNILOG
dan/TEE
switch berisi tanda pesanan byte sedikit-endian UTF-16 diikuti oleh naskah naskah terminal ISO-8859-1.Agar mudah dibaca, saya melakukan hal berikut di Ubuntu:
File yang dihasilkan cocok dengan apa yang saya lihat di command prompt Windows.
Bacaan lebih lanjut: pria
dd
, priaiconv
, priacol
sumber
([System.Text.Encoding]::Unicode).GetString([System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding(28591), [System.Text.Encoding]::Unicode, ([System.Text.Encoding]::GetEncoding(28591)).GetBytes($_)))
Melihat output file (biner) pada Win7, opsi / UNILOG tidak berguna. Itu menulis standar UNICODE BOM (FFFE), tetapi kemudian mulai menulis semua karakter sempit KECUALI untuk baris opsi (mis., / BYTES / S / COPY: DATS ...), yang merupakan unicode aktual. Setelah itu, ia kembali ke karakter ANSI tidak UTF-8, baik; yaitu, jika Anda memiliki nama file dengan karakter lebar di jalur, itu dikonversi menjadi '?' karakter.
Tampaknya tidak tertarik untuk memperbaikinya dari MSFT, karena sudah seperti ini selama beberapa waktu, dan saya memiliki semua pembaruan.
sumber
Saya memperbaiki file log Robocopy Unicode-format yang tidak dapat dibaca di Windows (yang secara tidak sengaja dibuat dengan menambahkan output Robocopy normal ke output Unicode dari Out-File di PowerShell), sebagai berikut:
Di PowerShell:
Kode di atas mungkin tidak berfungsi untuk semua ukuran file!
(Kredit untuk kode: Saya mengadaptasi kode dari pos ini oleh Ferdinand Prantl: Stackoverflow - Baca / Parse file Biner dengan PowerShell
sumber
Gunakan halaman kode UTF-8, kemudian jalankan winword converter
Jika nama file atau direktori Anda mengandung karakter Unicode maka sebelum mengeluarkan perintah Robocopy dengan
/unilog
parameter menggunakanchcp 65001
perintah. (Halaman kode 65001 adalah UTF-8 .)Setelah Anda memiliki log Unicode yang hancur, buka saja di MS Word as
Unicode (UTF-8)
dan simpan:sumber
Dalam kasus Anda, perintah di Powershell berbunyi seperti ini:
Solusinya adalah Anda menggunakan Out-File alih-alih parameter bawaan / unilog. Anda akan mendapatkan file log yang persis sama, tetapi sekarang akan ditulis dengan benar dalam unicode.
sumber
Jalankan
chcp
perintah sebelum perintah robocopy, dengan halaman kode yang tepat.untuk UTF-8 (tidak bekerja dengan robocopy & amp; Ibrani dan mungkin lebih banyak bahasa):
untuk bahasa Ibrani:
Daftar halaman kode lengkap: https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
sumber