Bagaimana cara menyalin dengan progres yang hanya dicatat ke konsol?

8

Saya ingin menjalankan RoboCopy yang akan memperbarui konsol dengan% progres tetapi tidak mengacaukan file log dengan% progres.

Perintah RoboCopy berikut akan melakukan copy yang diinginkan dan menambahkan informasi log file log.

RoboCopy <source> <dest> /log+:<log file> /tee

Masalahnya adalah file log berantakan dengan pembaruan% kemajuan. Karena itu saya perlu mengubah perintah untuk ini:

RoboCopy <source> <dest> /log+:<log file> /tee /np

Sekarang masalahnya adalah saya tidak mendapatkan% kemajuan pembaruan di layar.

Saya telah membaca http://technet.microsoft.com/en-us/library/cc733145%28WS.10%29.aspx beberapa kali sekarang dan tidak dapat menemukan saklar yang saya butuhkan. Apakah saya melewatkan sesuatu atau apa yang ingin saya capai tidak mungkin?

Tim Murphy
sumber
Apakah Anda harus menggunakan alat bawaan saja?
Hello71

Jawaban:

2

Karena tidak ada yang menjawab ini begitu lama, saya pikir saya akan menyarankan beberapa hal.

Jika Anda menggunakan skrip batch, seharusnya tidak terlalu sulit untuk menggunakan sed untuk menghapus informasi progres yang tidak diinginkan dari file log. Saya tidak cukup berpengalaman dengan itu untuk memberi Anda solusi menggunakannya tanpa menghabiskan waktu untuk itu.

Ada versi file .exe tunggal seddi UnxUtils (dengan versi yang lebih baru di zip pembaruan).

Pilihan lain adalah menggunakan XXCOPY sebagai ganti Robocopy. Ini memiliki jumlah saklar yang benar-benar konyol (lebih dari 230), yang memungkinkan Anda melakukan apa pun yang Anda inginkan. Anda harus menghabiskan sepanjang malam memilih mana yang ingin Anda gunakan. Ini juga memiliki kotak dialog progres GUI, jika Anda lebih suka menggunakannya.

Ada versi gratis untuk penggunaan pribadi, yang tidak dapat digunakan untuk skrip otomatis, karena Anda harus mengikuti petunjuk secara interaktif, tidak seperti versi berbayar.

XXCOPY

Alternatif lain adalah RichCopy , yang memiliki GUI yang dapat digunakan untuk memilih opsi Anda. Ini kemudian dapat memberi Anda baris perintah operasi Anda untuk digunakan dalam skrip batch.

RichCopy

paradroid
sumber
1

Re: robocopy dan kemajuan log 'noise'

Solusi: gunakan just / TEE dan biarkan ia mencatat 'noise', jika tidak, Anda tidak akan melihat adanya kemajuan. Kemudian gunakan sed, seperti yang disarankan untuk membersihkan logfile sebagai berikut:

sed -i.bak "s / \ x0d. * \ x0d. * $ //" logfile.txt

hapus .bak jika Anda tidak ingin cadangan yang belum diperbaiki. sed tersedia untuk windows di sini, dan berfungsi dengan baik, setidaknya untuk penggunaan baris * tunggal.

http://gnuwin32.sourceforge.net/packages/sed.htm

* (perintah sed dalam skrip unix bash / cshell sering tersebar di beberapa baris, menambah lebih banyak fleksibilitas dan kerumitan .. saya tidak mengharapkan tipe perintah sed itu bekerja dengan skrip windows cmd, tetapi sed masih berguna di bawah windows).

Mac
sumber
1 Apakah tidak ada cara untuk pipa stdoutmelalui sedlangsung?
paradroid
1
tentu saja Anda dapat menyalurkan melalui sed, yang akan menghapus informasi progres dari tampilan konsol dan mungkin juga file log ...
Mac
Tentu saja, tapi saya pikir mungkin teeperintah itu dapat digunakan alih-alih /TEEberalih Robocopy , tetapi saya baru menyadari bahwa itu adalah bagian dari TCC/LEdan bukan CMDperintah standar . Ini tersedia PowerShellmeskipun.
paradroid
sebenarnya .. masih menulis progress progres ke logfile! Begitu juga kebalikan dari apa yang diinginkan. Saya baru saja diuji dengan: robocopy. tst /log:n:tst.log / tee | sed "s / \ x0d. * \ x0d. * $ //"
Mac
tee juga tersedia dari gnuwin32 .. tetapi akan memiliki masalah yang sama;) gnuwin32.sourceforge.net/packages/coreutils.htm
Mac