Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - мониторинг копирования файлов

Ответить
Настройки темы
CMD/BAT - мониторинг копирования файлов

Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


День добрый

Вопрос такой: можно ли написать скриптик, чтобы при копировании файлов он показывал информацию о времени, оставшемся до завершения копирования и сколько процентов скопировано?

а то если пишешь copy ... ... он просто копирует и не ясно - какая скорость, это на пять минут или на пол дня...

Отправлено: 14:17, 09-12-2009

 

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Слышал, что виндовый Командир Нортон (не знаю, как он сейчас называется по-правильному) поддерживает командную строку.

-------
Как сказало Дерево Дровосеку: "я - пень".


Последний раз редактировалось NiOl, 09-12-2009 в 14:45. Причина: очепятки


Отправлено: 14:44, 09-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


т.к. все скриптовые языки однопотоковые, то рассчитать скорость, проценты и т.п. можно только между копированием отдельных файлов, поэтому при копировании нескольких больших файлов такая затея теряет смысл... хотя в некоторых случаях (если есть поддержка API, как в AutoIT) для этого удается задействовать системные потоки, по графическому отображению процессов в CMD есть отдельная тема:

CMD/BAT - [решено] Графическая оболочка для CMD (индикатор состояния)

Отправлено: 16:30, 09-12-2009 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


А почему не Far Manager? Тем паче, что версия 2.0 идёт под открытой лицензией.

P.S. Это ко 2-му посту.

Отправлено: 16:31, 09-12-2009 | #4


Аватара для Xaegr

Сотрудник Microsoft


Сообщения: 56
Благодарности: 24

Профиль | Сайт | Отправить PM | Цитировать


Цитата amel27:
т.к. все скриптовые языки однопотоковые »
Не говорите за всех Для PowerShell это никогда не было проблемой.
Впрочем там можно легко получить нативный прогрессбар при копировании (а еще и докачку с приоритизацией трафика) используя модуль BitsTransfer.


Для остальных языков вполне можно использовать стандартный Windows диалог копирования файлов. Делается это через COM-объект shell.application, и на PowerShell выглядит так (думаю сконвертировать на VBS не будет проблемой):
Код: Выделить весь код
$yesToAll = 16
$shellApplication = new-object -com shell.application
$test1 = $shellApplication.NameSpace("D:\Scripts\temp\test1")
$test2 = $shellApplication.NameSpace("D:\Scripts\temp\test2")
$test2.CopyHere($test1,$yesToAll)
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:34, 10-12-2009 | #5


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


NiOl, нортон командир наверное не будет работать на 64битной винде..
конечно, это всё замечательно, Нортон командир или Фар, но я как-бы скриптик хотел а не софтину.


amel27, спасибо за тему, почитаю, отпишусь.


Xaegr, очень интересно что вы про повершелл но ваш скрипт у меня просто копирует и ничего более не происходит, никакого мониторинга... вообще ничего. Очень хочтелось бы и повершельное решение моей проблемы.

Отправлено: 11:20, 10-12-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Xaegr, мы немного о разном, Вы - о возможности использовать готовые прогресс-бары сторонней разработки (COM, .NET, DLL, EXE и т.п.), а я - о возможности сваять свой собственный прогресс-бар, в API это обычно делается через определение своей CallBack - функции... Само собой, никто не мешает собрать в VisualStudio свой консольный EXE для копирования и вызывать его из CMD.

Отправлено: 11:38, 10-12-2009 | #7


Аватара для Xaegr

Сотрудник Microsoft


Сообщения: 56
Благодарности: 24

Профиль | Сайт | Отправить PM | Цитировать


Цитата amel27:
Xaegr, мы немного о разном, Вы - о возможности использовать готовые прогресс-бары сторонней разработки (COM, .NET, DLL, EXE и т.п.), »
Нет. Во первых я не упомянул ни одного компонента сторонней разработки - всё от MS. Во вторых, непонятно почему вы приписываете к сторонним компонентам COM, .NET, DLL? PowerShell сам основан на .NET (причем "насквозь"), и по сути состоит из нескольких .DLL Аналогично с VBS ([cw]script.exe, соотв. DLL) и т.д.
Цитата amel27:
а я - о возможности сваять свой собственный прогресс-бар, в API это обычно делается через определение своей CallBack - функции... »
Ну во-первых, я честно говоря не вижу пока в условии необходимости использования ни нескольких потоков, ни callback функций. Если вы хотите нарисовать совсем свой бар - write-progress. Ну или $host (чтоб совсем на низком уровне). Но если что, в PS есть возможность использовать и callback кода, и многопоточности.
Цитата Ingolder:
но ваш скрипт у меня просто копирует и ничего более не происходит, никакого мониторинга... »
Это второй вариант? Странно, он должен выводить графическое окно копирования файлов, стандартное как в Windows.
Если у вас Vista/2008 и выше, посмотрите справку к BitsTransfer. Там правда говориться в основном о веб, но файлы он качает тоже прекрасно. Возможность работы в отдельном потоке и прогрессбар встроены
Код: Выделить весь код
import-module bitstransfer
get-command -module bitstransfer 
man start-bitstransfer -full
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:17, 11-12-2009 | #8


Аватара для Xaegr

Сотрудник Microsoft


Сообщения: 56
Благодарности: 24

Профиль | Сайт | Отправить PM | Цитировать


Если не рекурсивно:
Код: Выделить весь код
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")

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
Благодарности: 108

Профиль | Отправить PM | Цитировать


Цитата Iska:
А почему не Far Manager? Тем паче, что версия 2.0 идёт под открытой лицензией.
P.S. Это ко 2-му посту. »
У FAR`а даже 2.0 (предыдущий не "Опен", но бесплатен для xUSSR) нет ключей для команды копирования, хотя вроде есть сои скрипты и скрипты можно указывать через параметр... а на счет произведения Питера Нортона не знаю ничего - я его давно не видел, но где-то когда-то слышал, что вроде некие действия можно заставить делать через командную строку.

В принципе есть мысль, как реализовать хоть какой-то мониторинг, но могу только толкнуть мысль, а вот реализовывать реально влом - не стоит овчина выделки (на мой взгляд):

Копированием занимается естественно сам батник.
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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - мониторинг копирования файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Защита от копирования файлов 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




 
Переход