Robocopy unilog çıktısı anlamsız


10

Unicode karakterleri olan dosyalara sahip olduğum için, Unicode günlüğü oluşturmak için Windows 7'de robocopy almaya çalıştım. Kullandığım komut:

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

Kopyalama dosyası çalışıyor ve ekran çıktısı doğru, günlük dosyası sadece anlamsız içeriyor. Bu, Komut İstemi'ni veya Powershell'i kullanmamdan bağımsızdır.

Ne oluyor? Yanlış bir şey mi yapıyorum?


Bu da benim deneyimim. bir çözüm buldun mu?
André Caron

Yanıtlar:


6

XP27'de hata. XP26 sürümüne geçmeyi deneyin.

XP27RoboCopy (Windows 7 ile birlikte gelen) sürümünde bir hata gibi görünüyor .

Sürümde XP26(Windows Vista ile birlikte gelir) /UNILOGbenim için mükemmel okunabilir bir Unicode günlük dosyası üretir.

Vista'nın bir kopyası yoksa, EasyRoboCopy de XP26sürümle birlikte gelir . (Aslında EasyRoboCopy kendisini denemedim, sadece robocopy.exekurulum dosyasından çıkardı WinRAR.)


2

Bir bakışta, /UNILOGve /TEEanahtarları kullanırken Robocopy tarafından yazılan dosyanın UTF-16 küçük endian bayt sırası işareti ve ardından bir ISO-8859-1 terminal yazı tipi içerdiğini söyleyebilirim .

Okunabilir hale getirmek için Ubuntu'da aşağıdakileri yaptım:

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

Ortaya çıkan dosya, Windows komut isteminde gördüklerimle eşleşiyor.

Daha fazla okuma: erkek dd, erkek iconv, erkekcol


Pencerelerde benzer dönüşüm yapmak için herhangi bir yolu var mı? Bu dönüşümü PowerShell'de boruda denedim, ancak başarılı ([System.Text.Encoding]::Unicode).GetString([System.Text.Encoding]::Convert([System.Text.Encoding]::GetEncoding(28591), [System.Text.Encoding]::Unicode, ([System.Text.Encoding]::GetEncoding(28591)).GetBytes($_)))
olamadım

Bu çalışıyor!!!!!
Corey

1

Win7'deki (ikili) dosya çıktısına bakıldığında, / UNILOG seçeneği işe yaramaz. Standart UNICODE BOM'u (FFFE) yazar, ancak gerçek unicode olan seçenekler satırı (örn., / BYTES / S / COPY: DATS ...) DIŞINDA tüm dar karakterleri yazmaya devam eder . Bundan sonra ANSI karakterlerine geri döner ve UTF-8 de değildir ; yani, yolda geniş bir karaktere sahip bir dosya adınız varsa, dar bir '?' biçimine dönüştürülür. karakter.

Görünüşe göre MSFT'den düzeltmekle ilgilenmiyorum, çünkü bir süredir bu şekilde oldu ve tüm güncellemeler var.


"Gerçek unicode" kodlaması diye bir şey yoktur. Şunu mu demek istedin UTF-16 / UCS-2? İlk etapta bu "unilog" adını vermek için önyükleme yapmak MS hatası
Nas Banov

1

Windows'ta okunamayan, Unicode biçimli Robocopy günlük dosyalarımı (PowerShell'deki Out-File'dan Unicode çıktısına normal Robocopy çıktısı ekleyerek yanlışlıkla oluşturuldu) aşağıdaki gibi düzelttim:

PowerShell'de:

$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

Yukarıdaki kod tüm dosya boyutları için çalışmayabilir!

(Kod için kredi: Ferdinand Prantl tarafından yazılan kodu uyarladım: Stackoverflow - İkili dosyaları PowerShell ile oku / ayrıştır


Çıktı Unicode karakterler içermiyorsa çalışır; aksi takdirde, bu karakterler ASCII'ye dönüştürülür.
curropar

1

UTF-8 kod sayfasını kullanın, ardından winword converter'ı çalıştırın

Dosya veya dizin adlarınız Unicode karakterler içeriyorsa, Robocopy komutunu /unilogparametre ile vermeden önce komutu kullanın chcp 65001. (Kod sayfası 65001 UTF-8'dir .)

Karışık Unicode günlüğüne sahip olduğunuzda, MS Word'de şu şekilde açın Unicode (UTF-8)ve kaydedin:

MS Word Dosya Dönüştürme İletişim Kutusu


0

Sizin durumunuzda, Powershell'deki komut şuna benzer:

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

Çözüm, yerleşik / unilog parametresi yerine Out-File kullanmanızdır. Tam olarak aynı günlük dosyasını alacaksınız, ancak şimdi unicode ile düzgün bir şekilde yazılacak.


4
Elbette unicode olacak, ancak özel unicode karakterler olmayacak. Unicode'a çevrilmiş sadece ASCII çıktısı.
Davor Josipovic

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.