|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как написать скрипт о проверке нужного файла на съемном носителе? |
|
|
[решено] Как написать скрипт о проверке нужного файла на съемном носителе?
|
Ветеран Сообщения: 2756 |
Профиль | Отправить PM | Цитировать Как сделать скрипт, чтобы он проверял все диски (съемные и не съемные) на предмет наличия определенного файла и при нахождении такового выполнял один EXE файл, а при не нахождении выполнял другой EXE файл? Хорошо было бы, если скрипт мог еще помимо названия искомого файла сравнивать его md5 сумму.
|
|
Отправлено: 23:52, 04-03-2009 |
D_Master
Сообщения: n/a |
Pozia, немного измененный скрипт amel27:
$sTag = "WIN51" $sDVD = "" $aDrives = DriveGetDrive("ALL") While 1 For $i=1 To $aDrives[0] If FileExists($aDrives[$i] &"\"& $sTag) Then $sDVD = $aDrives[$i] MsgBox(64, "Ура!", "Файл найден - запущена одна прога!") Exit EndIf Next If StringLen($sDVD)>0 Then ExitLoop MsgBox(16, "Ошыбко", "Файл не найден - запущена другая прога!") Exit WEnd |
Отправлено: 00:50, 05-03-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать D_Master, чет не очень скрипт. При запуске слышно обращение к флопику после сего выскакивает табличка с кракобякой какой то. Нажимая Продолжить и идет далее и срабатывает. При наличии кардрийдера нажимать Продолжить нужно несколько раз. Вот в скрипте от amel27 этих глюков нет. Знаете как исправить?
|
------- Отправлено: 01:07, 05-03-2009 | #3 |
D_Master
Сообщения: n/a |
|
Отправлено: 01:11, 05-03-2009 | #4 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать D_Master, сейчас исчет только по дискам веника. Нормально. Но не иисчет на флешках. Плохо. На флопике искать не надо. amel27 вроде как вот это реализовывал методом Автоит:
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i: set DVD=%CDROM% ... exit Так он перебором заданных букв найдет нужный файл в корне диска. Знаете как реализовать? |
|
------- Отправлено: 07:44, 05-03-2009 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
$sDRV = _DriveGetByTag("WIN51") If $sDRV=="" Then MsgBox(0, "Диск не найден", "Запуск файла 1") ; RunWait("file1.exe") Else MsgBox(0, "Диск "& $sDRV, "Запуск файла 2") ; RunWait("file2.exe") EndIf ; Поиск буквы диска по маркерному файлу ; ------------------------------------- Func _DriveGetByTag($sTag, $sType = "ALL") Local $sDrive = "", $aDrives = DriveGetDrive($sType) For $i=1 To $aDrives[0] If DriveStatus($aDrives[$i]) = "READY" Then If FileExists($aDrives[$i] &"\"& $sTag) Then Return $aDrives[$i] EndIf Next Return SetError(1,0,"") EndFunc ; ==> _DriveGetByTag |
|
Отправлено: 10:05, 05-03-2009 | #6 |
D_Master
Сообщения: n/a |
Цитата Pozia:
|
|
Отправлено: 11:04, 05-03-2009 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
2. Извлечь из архива "MD5.AU3" и скопировать в "c:\Program Files\AutoIT3\Include" #include <MD5.au3> $sTAG = "WIN51" $sMD5 = "0x11EBD14DA392096ADA35674D538D7FFD" $sDRV = _DriveGetByTag($sTAG) If $sDRV=="" Then MsgBox(0, "Диск не найден", "Запуск файла 1") ; RunWait("file1.exe") ElseIf _FileMD5Test($sDRV &"\"& $sTAG, $sMD5) Then MsgBox(0, "Диск найден, MD5-сумма совпала."& $sDRV, "Запуск файла 2") ; RunWait("file2.exe") Else MsgBox(0, "Диск найден, MD5-сумма НЕ совпала!"& $sDRV, "Запуск файла 3") ; RunWait("file3.exe") EndIf ; Поиск буквы диска по маркерному файлу ; ------------------------------------- Func _DriveGetByTag($sTag, $sType = "ALL") Local $sDrive = "", $aDrives = DriveGetDrive($sType) For $i=1 To $aDrives[0] If DriveStatus($aDrives[$i]) = "READY" Then If FileExists($aDrives[$i] &"\"& $sTag) Then Return $aDrives[$i] EndIf Next Return SetError(1,0,"") EndFunc ; ==> _DriveGetByTag ; Проверка MD5-хеша файла ; ----------------------- Func _FileMD5Test($sPath, $sMD5) Local $MD5CTX, $Hash, $BufSize = 32768 Local $hFile = FileOpen($sPath, 16) If $hFile = -1 Then Return SetError(1, 0, 0) $MD5CTX = _MD5Init() For $i=1 To Ceiling(FileGetSize($sPath) / $BufSize) _MD5Input($MD5CTX, FileRead($hFile, $BufSize)) Next $Hash = _MD5Result($MD5CTX) ConsoleWrite($Hash &@CRLF) FileClose($sPath) Return $Hash=$sMD5 EndFunc ; ==> _FileMD5Test |
|
Отправлено: 11:22, 05-03-2009 | #8 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, все супер как нормально работает!!!! Спасибочки!!!
amel27, а если чуть усложнить. Нужно найти файл по указанному пути, проверив все диски. Как тогда? Сам докумекал. Нужно записать так $sTAG = "путь\WIN51" amel27, а как вместо запуска файла по команде: RunWait("file1.exe") удалить запись в реестре? [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\001] "1"="C:\\WINDOWS\\system32\\file.exe" Удалить нужно только "1"="C:\\WINDOWS\\system32\\file.exe" Все остальные там записи не надо трогать |
------- Отправлено: 19:01, 05-03-2009 | #9 |
D_Master
Сообщения: n/a |
Цитата Pozia:
|
|
Отправлено: 19:22, 05-03-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Как найти и прописать в реестре запуск нужного файла? | Pozia | AutoIt | 12 | 12-03-2009 23:38 | |
Вопрос - Защита файлов на съемном носителе | V90 | Защита компьютерных систем | 1 | 16-02-2009 03:27 | |
VBS/WSH/JS - [решено] Stop цикл при обнаружении нужного значения из файла | Afon | Скриптовые языки администрирования Windows | 4 | 26-01-2009 15:16 | |
Подскажите как написать скрипт проверки доменов? | Guest | Вебмастеру | 10 | 29-09-2004 20:43 | |
Как правильно написать скрипт mailing-list | vadimiron | Вебмастеру | 7 | 14-01-2004 20:07 |
|