|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - мониторинг копирования файлов |
|
|
CMD/BAT - мониторинг копирования файлов
|
Старожил Сообщения: 318 |
Профиль | Отправить PM | Цитировать День добрый
Вопрос такой: можно ли написать скриптик, чтобы при копировании файлов он показывал информацию о времени, оставшемся до завершения копирования и сколько процентов скопировано? а то если пишешь copy ... ... он просто копирует и не ясно - какая скорость, это на пять минут или на пол дня... |
|
Отправлено: 14:17, 09-12-2009 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Слышал, что виндовый Командир Нортон (не знаю, как он сейчас называется по-правильному) поддерживает командную строку.
|
------- Последний раз редактировалось NiOl, 09-12-2009 в 14:45. Причина: очепятки Отправлено: 14:44, 09-12-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать т.к. все скриптовые языки однопотоковые, то рассчитать скорость, проценты и т.п. можно только между копированием отдельных файлов, поэтому при копировании нескольких больших файлов такая затея теряет смысл... хотя в некоторых случаях (если есть поддержка API, как в AutoIT) для этого удается задействовать системные потоки, по графическому отображению процессов в CMD есть отдельная тема:
CMD/BAT - [решено] Графическая оболочка для CMD (индикатор состояния) |
Отправлено: 16:30, 09-12-2009 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать А почему не Far Manager? Тем паче, что версия 2.0 идёт под открытой лицензией.
P.S. Это ко 2-му посту. |
Отправлено: 16:31, 09-12-2009 | #4 |
Сотрудник Microsoft Сообщения: 56
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
Впрочем там можно легко получить нативный прогрессбар при копировании (а еще и докачку с приоритизацией трафика) используя модуль BitsTransfer. Для остальных языков вполне можно использовать стандартный Windows диалог копирования файлов. Делается это через COM-объект shell.application, и на PowerShell выглядит так (думаю сконвертировать на VBS не будет проблемой): |
||
Отправлено: 10:34, 10-12-2009 | #5 |
Старожил Сообщения: 318
|
Профиль | Отправить PM | Цитировать NiOl, нортон командир наверное не будет работать на 64битной винде..
конечно, это всё замечательно, Нортон командир или Фар, но я как-бы скриптик хотел а не софтину. amel27, спасибо за тему, почитаю, отпишусь. Xaegr, очень интересно что вы про повершелл но ваш скрипт у меня просто копирует и ничего более не происходит, никакого мониторинга... вообще ничего. Очень хочтелось бы и повершельное решение моей проблемы. |
Отправлено: 11:20, 10-12-2009 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Xaegr, мы немного о разном, Вы - о возможности использовать готовые прогресс-бары сторонней разработки (COM, .NET, DLL, EXE и т.п.), а я - о возможности сваять свой собственный прогресс-бар, в API это обычно делается через определение своей CallBack - функции... Само собой, никто не мешает собрать в VisualStudio свой консольный EXE для копирования и вызывать его из CMD.
|
Отправлено: 11:38, 10-12-2009 | #7 |
Сотрудник Microsoft Сообщения: 56
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
Цитата amel27:
Цитата Ingolder:
Если у вас Vista/2008 и выше, посмотрите справку к BitsTransfer. Там правда говориться в основном о веб, но файлы он качает тоже прекрасно. Возможность работы в отдельном потоке и прогрессбар встроены |
|||
Отправлено: 10:17, 11-12-2009 | #8 |
Сотрудник Microsoft Сообщения: 56
|
Профиль | Сайт | Отправить PM | Цитировать Если не рекурсивно:
Если рекурсивно, то сложнее:
Требования: 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") Import-Module BitsTransfer -ea 0 $Script:Transfer = $null function Copy-Directory ( [string] $SourceDirectory, [string] $DestinationDirectory, [switch] $recurse ) { if (-not (Test-Path $DestinationDirectory -PathType Container)) { write-Verbose "Creating Directory '$DestinationDirectory'" New-Item $DestinationDirectory -Type Directory -Force | Out-Null } if ($recurse) { Get-ChildItem $SourceDirectory | Where-Object {$_.PSIsContainer} | Foreach-Object { Copy-Directory $_.FullName (Join-Path $DestinationDirectory ($_.Name)) -recurse } } if ($Script:Transfer) { Write-Verbose "Adding files to transfer from'$($SourceDirectory + "\*")' to '$DestinationDirectory'" Add-BitsFile -BitsJob $Script:Transfer -Source ($SourceDirectory + "\*") -Destination $DestinationDirectory | out-null } else { Write-Verbose "Starting transfer from '$($SourceDirectory + "\*")' to '$DestinationDirectory'" $Script:Transfer = Start-BitsTransfer -Source ($SourceDirectory + "\*") -Destination $DestinationDirectory -Priority $Priority -Asynchronous } } copy-directory $Source $Destination -recurse:$Recurse if ($Asynchronous) { $Script:Transfer } else { $Script:Transfer | Suspend-BitsTransfer | Resume-BitsTransfer -ea 0 } |
Отправлено: 11:48, 11-12-2009 | #9 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Цитата Iska:
В принципе есть мысль, как реализовать хоть какой-то мониторинг, но могу только толкнуть мысль, а вот реализовывать реально влом - не стоит овчина выделки (на мой взгляд): Копированием занимается естественно сам батник. 1. Командой dir /b /a /s (или даже /e ) получаем список того, что будет копироваться и подсчитываем общий объем (через %~z_) /кол-во файлов. Команда For /R не годиться из-за игнорирования системных файлов. 2. Со временем самый гимор - придется каждый раз переводить %time% в секунды, а может и в сотые доли секунд. Это тормоза. Время надо засекать перед каждым запуском (start /b xcopy [src] [dst] >log) и отслеживать постепенное увеличение размера копируемого файла * надеюсь он сразу целиком не резервируется на случай незавершенной операции копирования... 3. По текущему размеру и времени можно подсчитать текущую скорость копирования и сделать прогноз окончания. Как вариант можно отправить на копирование сразу все и следить либо за лог-файлом (но он скорее всего будет пополняться по 4кб или близко к тому) или каждый раз сканируя каталог-получатель. |
|
------- Отправлено: 16:01, 11-12-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Защита от копирования файлов | taras_ma | Microsoft Windows NT/2000/2003 | 3 | 27-01-2009 01:56 | |
Защита файлов от копирования | Stalin07 | Хочу все знать | 2 | 24-09-2008 13:30 | |
Мониторинг копирования (перемещения) файлов по сети | glazemir | Microsoft Windows NT/2000/2003 | 8 | 15-05-2008 09:07 | |
Запрет копирования файлов в сетке | sannik | Защита компьютерных систем | 6 | 23-08-2006 10:45 | |
Не читается диск после копирования файлов | DmitryOlenin | Автоматическая установка Windows 2000/XP/2003 | 13 | 10-05-2006 11:45 |
|