Автор оригинального сценария, представленного ниже - член клуба поклонников 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")