Например, так:
Code
crlf$=CHR(13)+CHR(10)
space$=' '
searchfile$='Game.txt'
Run("cmd","wait,hide /c for /f "tokens=1 delims=\" %i in ('fsutil fsinfo drives ^| more') do (echo %i >> <Temp>\drives.txt)")
drives$=StrFromFile(<Temp>\drives.txt,1,-1)
drives$=StrChange(drives$,crlf$,'')
drives$=StrChange(drives$,space$,'')
For i=2 To GetArrayNum(drives$,:)
drive$=GetArrayItem(drives$,:,i)
searchparam$='wait,hide /c dir "'+drive$+':\\'+searchfile$+'" /a:-d /s | find /i /c "'+searchfile$+'" > <Temp>\check.txt'
Run("cmd","searchparam$")
check=VAL(StrFromFile(<Temp>\check.txt,1,1))
If (check) Then
LoadText("Text","У вас установлена игра")
Break()
End
Next i
If (check=0) Then
LoadText("Text","У вас не установлена игра")
End
Run("cmd","hide /c del <Temp>\drives.txt; <Temp>\check.txt /q")
Quote (DEMBEL)
ну для этого же есть команда поиска файлов SearchForFiles, поиск рекурсивный, будет искать в поддиректориях
Эта команда ищет только типы файлов. Фиксированное имя ей не под силу... Добавлено (12 Апрель 2009, 11:18)
---------------------------------------------
Ну ладно, автора вопроса, я смотрю, не заинтересовало решение - попробую подготовить для "ГОТОВЫХ ОТВЕТОВ".
Может кому пригодится...
toizy, друже, перекинь, если чего.
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")