| Автор оригинального сценария, представленного ниже - член клуба поклонников MMB - Rush. Code crlf$=CHR(13)+CHR(10) space$=' ' searchfile$='Test.txt' Run("cmd","wait,hide /c for /f "tokens=1 delims=\" %i in ('fsutil fsinfo drives ^| more') do (echo %i >> <Temp>\drives.txt)") ** Можно использовать другой вариант - с пропуском дисководов, в которых нет дисков **p$='wait,hide /c @echo off & <System>\mshta.exe "javascript:var f,e,l=\'\';' **p$=p$+'f=new ActiveXObject(\'scripting.filesystemobject\');e=new Enumerator(f.drives);' **p$=p$+'for(;!e.atEnd();e.moveNext()){if(e.item().isready)l+=e.item().driveletter+\':\'}' **p$=p$+'f.getstandardstream(1).write(l);close();" 1 | more > <Temp>\drives.txt' **Run("cmd","p$") ** Загружаем и обрабатываем массив букв дисков (1-й вариант) drives$=StrFromFile(<Temp>\drives.txt,1,-1) drives$=StrChange(drives$,crlf$,'') drives$=StrChange(drives$,space$,'') drives$=St rDel(drives$,1,6) ** При 2-м варианте все действия не нужны, достаточно одного **drives$=StrFromFile(<Temp>\drives.txt,1,1) For i=1 To GetArrayNum(drives$,:) drive$=GetArrayItem(drives$,:,i) searchparam$='wait,hide /c dir "'+drive$+':\\'+searchfile$+'" /a:-d /s | find /i /c "' searchparam$=searchparam$+searchfile$+'" > <Temp>\check.txt' Run("cmd","searchparam$") check=VAL(StrFromFile(<Temp>\check.txt,1,1)) If (check) Then Message("Файл существует","") Break() End Next i If (check=0) Then Message("Файл не существует","") End Run("cmd","hide /c del <Temp>\drives.txt; <Temp>\check.txt /q") А теперь пример "Глобального поиска файла" подробно: 1) Создаем необходимые константы, их можно и в скрипт загрузки проекта вставить crlf$=CHR(13)+CHR(10) space$=' ' 2) Выбираем файл, который нужно найти searchfile$='Test.txt' 3) Получаем список всех дисков на компьютере в файл Run("cmd","wait,hide /c for /f "tokens=1 delims=\" %i in ('fsutil fsinfo drives ^| more') do (echo %i >> <Temp>\drives.txt)") note: можно использовать другой вариант - с пропуском дисководов, в которых нет дисков p$='wait,hide /c @echo off & <System>\mshta.exe "javascript:var f,e,l=\'\';' p$=p$+'f=new ActiveXObject(\'scripting.filesystemobject\');e=new Enumerator(f.drives);' p$=p$+'for(;!e.atEnd();e.moveNext()){if(e.item().isready)l+=e.item().driveletter+\':\'}' p$=p$+'f.getstandardstream(1).write(l);close();" 1 | more > <Temp>\drives.txt' Run("cmd","p$") 4) Загружаем и обрабатываем массив букв дисков (1-й вариант) drives$=StrFromFile(<Temp>\drives.txt,1,-1) drives$=StrChange(drives$,crlf$,'') drives$=StrChange(drives$,space$,'') drives$=StrDel(drives$,1,6) note: при 2-м варианте все действия не нужны, достаточно одного drives$=StrFromFile(<Temp>\drives.txt,1,1) 5) Запускаем цикл по проверке всех дисков на наличие файла For i=1 To GetArrayNum(drives$,:) 6) Получаем букву диска drive$=GetArrayItem(drives$,:,i) 7) Выполняем проверку полученного диска на наличие файла (операция быстрая) searchparam$='wait,hide /c dir "'+drive$+':\\'+searchfile$+'" /a:-d /s | find /i /c "' searchparam$=searchparam$+searchfile$+'" > <Temp>\check.txt' Run("cmd","searchparam$") 8) Получаем значение (TRUE/FALSE) наличия файла на диске check=VAL(StrFromFile(<Temp>\check.txt,1,1)) 9) Если значение check=TRUE тогда завершаем поиск - файл существует If (check) Then Message("Файл существует","") Break() End 10) Иначе идет проверка следующего диска Next i 11) Если в результате обхода всех дисков значение check=FALSE - файла с таким именем нет If (check=0) Then Message("Файл не существует","") End 12) Удаляем временные файлы Run("cmd","hide /c del <Temp>\drives.txt; <Temp>\check.txt /q")
Вечная память Андрею Сергееву!
|