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

Показать сообщение отдельно

Ветеран


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

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


Здравствуйте товарищи, радует что тема растет и множится.
Написал скрипт для автоматизации процесса скидывания 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

Последний раз редактировалось EgOrus, 31-08-2005 в 13:38.


Отправлено: 17:13, 30-08-2005 | #108