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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как написать скрипт о проверке нужного файла на съемном носителе?

Ответить
Настройки темы
[решено] Как написать скрипт о проверке нужного файла на съемном носителе?

Аватара для Pozia

Ветеран


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

Профиль | Отправить 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



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

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


Аватара для Pozia

Ветеран


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

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


D_Master, чет не очень скрипт. При запуске слышно обращение к флопику после сего выскакивает табличка с кракобякой какой то. Нажимая Продолжить и идет далее и срабатывает. При наличии кардрийдера нажимать Продолжить нужно несколько раз. Вот в скрипте от amel27 этих глюков нет. Знаете как исправить?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 01:07, 05-03-2009 | #3

D_Master


Сообщения: n/a

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


Pozia, ну вы же сами попросили на всех дисках файл искать
попробуйте вместо
Код: Выделить весь код
$aDrives = DriveGetDrive("ALL")
вставить
Код: Выделить весь код
$aDrives = DriveGetDrive("FIXED")
сам не могу проверить, т.к. картридеры отключена, а флопика нету

Отправлено: 01:11, 05-03-2009 | #4


Аватара для Pozia

Ветеран


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

Профиль | Отправить 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
Благодарности: 1563

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


Цитата Pozia:
Как сделать скрипт, чтобы он проверял все диски (съемные и не съемные) на предмет наличия определенного файла и при нахождении такового выполнял один EXE файл, а при не нахождении выполнял другой EXE файл? »
Код: Выделить весь код
$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:
На флопике искать не надо. amel27 вроде как вот это реализовывал методом Автоит: »
Там он искал на драйвах (CDROM), т.е., к винтам и флопикам обращения не было.

Отправлено: 11:04, 05-03-2009 | #7


Googler


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

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


Цитата Pozia:
Хорошо было бы, если скрипт мог еще помимо названия искомого файла сравнивать его md5 сумму. »
1. Скачать с оффсайта библитеку MD5,SHA1,CRC32,RC4,BASE64,XXTEA machine, прямой линк
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


Аватара для Pozia

Ветеран


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

Профиль | Отправить 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:
а как вместо запуска файла по команде:
RunWait("file1.exe")
удалить запись в реестре? »
Код: Выделить весь код
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\001", "1")
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 05-03-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как написать скрипт о проверке нужного файла на съемном носителе?

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

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




 
Переход