Здравствуйте товарищи, радует что тема растет и множится.
Написал скрипт для автоматизации процесса скидывания CD и DVD дисков на HDD (мне нужно было скинуть большое количество фильмов).
Так вот вопрос такой, хотелось бы сделать прогрэсбар для наглядности, но каким образом обновлять его, что-то не представляю. Вернее есть решение, считывать объем инфы кот. уже скопировалась и сравнивать с общим объемом компакт диска, но это работает только в случае копирования мелких фалов, при копировании фильма индикатор с 1% будет прыгать на 100%. Есть ли какое-то решение?
Код:
; Скрипт полностью автоматизирует процесс копирования, от пользователя требуется
; только вставлять диски и задвигать лоток. Скипт написан для запуска из Total Commander,
; но можно использовать и самостоятельно.
; В верхнем левом углу выводит инф. о текущем действии скрипта.
; Пример запуска:
; cdcopy.exe [CD] [Destination]
; cdcopy.exe X: D:\Video или cdcopy X "D:\Video store"
; cdcopy.exe "%P" "%T" из TC
;-----------------------------------------------------------
Opt('ExpandVarStrings', 1)
Opt('TrayIconDebug',1)
;Назначение переменных из командной строки
$cmd1 = $CmdLine[1]
$cmd2 = $CmdLine[2]
;Приведение переменных к нужному виду
If StringLen($cmd1) = 1 Then $cmd1 = "$cmd1$:"
If StringLen($cmd2) = 1 Then $cmd2 = "$cmd2$:"
If StringLen($cmd1) > 2 Then $cmd1 = StringLeft("$cmd1$", 2)
If StringRight("$cmd2$", 1) = "\" Then $cmd2 = StringTrimRight("$cmd2$", 1)
;Завершение скрипта если нет параметров или первый параметр не явл. буквой CD(DVD)ROM'а
If $CmdLine[0] = 0 Then
MsgBox(4096,"CD-DVD Copy script", "No command-line arguments")
Exit
ElseIf DriveGetType("$cmd1$\") <> "CDROM" Then
MsgBox(4096,"CD-DVD Copy script", "$cmd1$ is not a CD(DVD)ROM drive letter")
Exit
EndIf
;Начало цикла
While 1
Sleep (1000)
;Если в приводе нет носителя, начинаем цикл сначала
If DriveStatus("$cmd1$\") == "NOTREADY" Then ContinueLoop
ToolTip(" CD mount.", 1, 1)
Sleep (500)
;Получаем объем своб.места на диске назначения и конвертируем его в gb. в случае если места больше 1024 mb.
$DestFree = DriveSpaceFree(StringLeft("$cmd2$", 2) & "\")
if $DestFree > 1024 Then
$DestFreeGB = round (($DestFree / 1024), 2)
$siz = "gb."
Else
$DestFreeGB = round ($DestFree, 2)
$siz = "mb."
EndIf
;получаем объем носителя в mb. (CD или DVD)
$SourceTotal = DriveSpaceTotal("$cmd1$\")
If $SourceTotal > 801 Then
$media = "DVD"
Else
$media = "CD"
EndIf
;получаем Метку диска
$CDlabel = DriveGetLabel("$cmd1$\")
;Завершение скрипта если недостаточно свободного места на диске назначения
ToolTip(" Check free space.", 1, 1)
Sleep (500)
ToolTip(" Free space: $DestFreeGB$ $siz$", 1, 1)
If $DestFree < $SourceTotal Then
MsgBox(4096,"CD-DVD Copy script", "Not enough free space on Drive " & StringLeft("$cmd2$", 2) & " " & round($DestFree, 2) & " mb. free")
Exit
EndIf
Sleep (1000)
;Создаем папку, куда затем будет скопирован диск
DirCreate("$cmd2$\!new\$CDlabel$")
ToolTip(" $media$ copy in progress :: $CDlabel$ :: [" & round($SourceTotal, 2) & " mb.]", 1, 1)
DirCopy("$cmd1$\", "$cmd2$\!new\$CDlabel$",1)
ToolTip(" $media$ copy complete", 1, 1)
Sleep (500)
SoundSetWaveVolume(50)
SoundPlay ( "C:\WINDOWS\Media\chimes.wav")
CDTray("$cmd1$", "open")
ToolTip(" Please mount Media in Drive $cmd1$", 1, 1)
Sleep (4000)
WEnd