![]() |
мониторинг копирования файлов
День добрый :)
Вопрос такой: можно ли написать скриптик, чтобы при копировании файлов он показывал информацию о времени, оставшемся до завершения копирования и сколько процентов скопировано? а то если пишешь copy ... ... он просто копирует и не ясно - какая скорость, это на пять минут или на пол дня... |
Слышал, что виндовый Командир Нортон (не знаю, как он сейчас называется по-правильному) поддерживает командную строку. :dont-know
|
т.к. все скриптовые языки однопотоковые, то рассчитать скорость, проценты и т.п. можно только между копированием отдельных файлов, поэтому при копировании нескольких больших файлов такая затея теряет смысл... хотя в некоторых случаях (если есть поддержка API, как в AutoIT) для этого удается задействовать системные потоки, по графическому отображению процессов в CMD есть отдельная тема:
CMD/BAT - [решено] Графическая оболочка для CMD (индикатор состояния) |
А почему не Far Manager? Тем паче, что версия 2.0 идёт под открытой лицензией.
P.S. Это ко 2-му посту. |
Цитата:
Впрочем там можно легко получить нативный прогрессбар при копировании (а еще и докачку с приоритизацией трафика) используя модуль BitsTransfer. Для остальных языков вполне можно использовать стандартный Windows диалог копирования файлов. Делается это через COM-объект shell.application, и на PowerShell выглядит так (думаю сконвертировать на VBS не будет проблемой): Код:
$yesToAll = 16 |
NiOl, нортон командир наверное не будет работать на 64битной винде..
конечно, это всё замечательно, Нортон командир или Фар, но я как-бы скриптик хотел а не софтину. amel27, спасибо за тему, почитаю, отпишусь. Xaegr, очень интересно что вы про повершелл :) но ваш скрипт у меня просто копирует и ничего более не происходит, никакого мониторинга... вообще ничего. Очень хочтелось бы и повершельное решение моей проблемы. |
Xaegr, мы немного о разном, Вы - о возможности использовать готовые прогресс-бары сторонней разработки (COM, .NET, DLL, EXE и т.п.), а я - о возможности сваять свой собственный прогресс-бар, в API это обычно делается через определение своей CallBack - функции... Само собой, никто не мешает собрать в VisualStudio свой консольный EXE для копирования и вызывать его из CMD. :)
|
Цитата:
Цитата:
Цитата:
Если у вас Vista/2008 и выше, посмотрите справку к BitsTransfer. Там правда говориться в основном о веб, но файлы он качает тоже прекрасно. Возможность работы в отдельном потоке и прогрессбар встроены :) Код:
import-module bitstransfer |
Если не рекурсивно:
Код:
ipmo bitstransfer; start-bitstransfer -soruce c:\src\* -dest d:\dst Требования: PowerShell 2.0, BITS 4.0, Vista/2008 и выше (хотя может и на XP будет работать, но не уверен). На 7/2008R2 всё уже в комплекте. Вызывать например так: C:\Root\Copy-FileBITS.ps1 c:\src d:\dst -recurse -priority high Copy-FileBits.ps1: Код:
param ($Source, $Destination, [switch]$Asynchronous, [switch]$Recurse, $Priority="Normal") |
Цитата:
В принципе есть мысль, как реализовать хоть какой-то мониторинг, но могу только толкнуть мысль, а вот реализовывать реально влом - не стоит овчина выделки (на мой взгляд): Копированием занимается естественно сам батник. 1. Командой dir /b /a /s (или даже /e ) получаем список того, что будет копироваться и подсчитываем общий объем (через %~z_) /кол-во файлов. Команда For /R не годиться из-за игнорирования системных файлов. 2. Со временем самый гимор - придется каждый раз переводить %time% в секунды, а может и в сотые доли секунд. Это тормоза. Время надо засекать перед каждым запуском (start /b xcopy [src] [dst] >log) и отслеживать постепенное увеличение размера копируемого файла * надеюсь он сразу целиком не резервируется на случай незавершенной операции копирования... 3. По текущему размеру и времени можно подсчитать текущую скорость копирования и сделать прогноз окончания. Как вариант можно отправить на копирование сразу все и следить либо за лог-файлом (но он скорее всего будет пополняться по 4кб или близко к тому) или каждый раз сканируя каталог-получатель. |
Приветствие. Хочу сделать для себя bat'ник, который копирует из одной папки в другую с отображением прогрессбара (собственно ради чего тут вся тема и затеяна), но по инструкции Xaegr что-то ничего не выходит:
Код:
ipmo bitstransfer; start-bitstransfer -soruce d:\Download\!Vid2CHG\* -dest \\DUNE\DuneHDD_dc4c66d24c66a6cc\!Serials\YT |
rider42, это PowerShell
|
Busla, извиняюсь за тупой вопрос, но как тогда правильно эту команду воплотить в исполняемый файл по типу bat?
upd. вроде сделал как в интернетах пишут. Создал bat с кодом: Код:
powershell -file d:\Convert\YT_ch_LVL\move_PS_d-dune.ps1 move_PS_d-dune.ps1 Код:
ipmo bitstransfer; start-bitstransfer -soruce d:\Download\!Vid2CHG\* -dest \\DUNE\DuneHDD_dc4c66d24c66a6cc\!Serials\YT Код:
ipmo bitstransfer; start-bitstransfer -soruce f:\Download\!Vid2CHG\* -dest \\DUNE\DuneHDD_dc4c66d24c66a6cc\!Serials\YT ![]() |
rider42, напишите имя параметра правильно — не «soruce».
|
Спасибо. Сделал и заработало.
Только подскажите пожалуйста по принципу работы bat'ника? Копируется исключительно со второй папки, а первую процесс почему-то пропускает. Но если первой строкой пустить пустую, то всё работает как надо: Код:
Код:
move d:\Download\!Vid2CHG\*.* \\DUNE\DuneHDD_dc4c66d24c66a6cc\!Serials\YT\ |
Приветствие.
Нужна помощь. Вчера при копировании при помощи выше описанных командах этот процесс завис и я просто закрыл окно консоли. Но проблема в том, что такое ощущение, что сам процесс где-то остался в системе и теперь в папке назначения с периодичность где-то час стали появляться tmp файлы, хотя исходная папка пустая. Комп после этого и перезагружался и выключался - и всё-равно tmp файлы всё так же появляются. |
|
Время: 05:08. |
Время: 05:08.
© OSzone.net 2001-2025