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

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

Ответить
Настройки темы
[решено] Поиск файла на компьютере

Аватара для sashadeg

Старожил


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

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


Не знаю, возможно ли это но всё таки...
Возможно ли такое чтобы скрипт провёл поиск на компьютере оперделённого файла?
Например нужно найти вот такой файл:
"\cstrike\cfg\config.cfg"
при чём, как вы видите две последних папки известны, а вот где лежит папка "cstrike" это нужно определить и получить весь путь к файлу "config.cfg"
Вот такая задача =/

-------
Ну вы ребята даёте...


Отправлено: 22:29, 29-01-2010

 

Аватара для Creat0R

Must AutoIt


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

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


Прежде чем искать файл, следовало бы поискать решение на форуме.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:50, 29-01-2010 | #2



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

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


Аватара для sashadeg

Старожил


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

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


Цитата Creat0R:
Код: Выделить весь код
#include <Array.au3>

$begin1 = TimerInit()
$aReturn = _FileSearch(@WindowsDir, "*.ini")
$dif1 = TimerDiff($begin1)

_ArrayDisplay($aReturn, Round($dif1, 2))

Func _FileSearch($sPath, $sFileMask)
    Local $iPID, $sStdOutRead, $aRet

    $iPID = Run(@ComSpec & ' /C Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)

    While 1
        $sStdOutRead &= StdoutRead($iPID)
        If @error <> 0 Then ExitLoop
    WEnd

    $aRet = StringSplit(StringStripCR(StringStripWS($sStdOutRead, 3)), @LF)
    Return SetError(@error, 0, $aRet)
EndFunc
Как я понял, этот скрипт ищет все файлы .ini в папке Windows?
А что если я не знаю даже на каком из дисков лежит этот файл? Результатов может быть целая куча, но мне нужно только те что имеют в пути к файлу вот такой фрагмент \cstrike\cfg\config.cfg
Например,
Имеются 2 одинаковых файла на компе под именем config.cfg
c:\windows\system\config.cfg
d:\prog\cstrike\cfg\config.cfg

и поиск должен выдать только второй путь из этих двух

-------
Ну вы ребята даёте...


Отправлено: 08:14, 30-01-2010 | #3


Аватара для Creat0R

Must AutoIt


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

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


Цитата sashadeg:
А что если я не знаю даже на каком из дисков лежит этот файл? »
Тогда нужно перебирать все диски...

Цитата sashadeg:
мне нужно только те что имеют в пути к файлу вот такой фрагмент \cstrike\cfg\config.cfg »
Можно например так:

Код: Выделить весь код
#include <Array.au3>

$aDrives = DriveGetDrive("FIXED")

For $i = 1 To UBound($aDrives) - 1
    $aReturn = _FileSearch($aDrives[$i] & "\", "config.cfg", "\cstrike\cfg\")
    If IsArray($aReturn) Then _ArrayDisplay($aReturn)
Next

Func _FileSearch($sPath, $sFileMask, $sInPath = "")
    Local $iPID, $sStdOutRead, $sRet, $aRet

    $iPID = Run(@ComSpec & ' /C Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)

    While 1
        $sStdOutRead = StdoutRead($iPID)
        If @error <> 0 Then ExitLoop

        If $sInPath <> "" And StringInStr($sStdOutRead, $sInPath) Then $sRet &= $sStdOutRead
    WEnd

    $aRet = StringSplit(StringStripCR(StringStripWS($sRet, 3)), @LF)
    Return SetError(@error, 0, $aRet)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 12:18, 30-01-2010 | #4


Аватара для sashadeg

Старожил


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

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


Сразу после запуска скрипта вылетает вот такое окошечко

Что это может значить?
Операционная система Windows 7
Файл который нужно найти находится вот тут F:\Counter-Strike Source\cstrike\cfg\config.cfg

-------
Ну вы ребята даёте...


Отправлено: 12:58, 30-01-2010 | #5


Аватара для madmasles

Ветеран


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

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


У меня так находит.

Код: Выделить весь код
$Drive = DriveGetDrive('ALL')
    For $i = 1 To $Drive[0]
        $aReturn = _FileSearch($Drive[$i], 'config.cfg')
        For $i2 = 1 To $aReturn[0]
            If StringInStr($aReturn[$i2], "\cstrike\cfg\") > 0 Then
                FileWrite("my.txt", $aReturn[$i2] & @CRLF)
            EndIf
        Next
    Next
MsgBox(0, "", "Поиск окончен." & @CRLF & "Результат в файле my.txt")
Func _FileSearch($sPath, $sFileMask)
    Local $iPID, $sStdOutRead, $aRet

    $iPID = Run(@ComSpec & ' /C Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)

    While 1
        $sStdOutRead &= StdoutRead($iPID)
        If @error <> 0 Then ExitLoop
    WEnd

    $aRet = StringSplit(StringStripCR(StringStripWS($sStdOutRead, 3)), @LF)
    Return SetError(@error, 0, $aRet)
EndFunc
PS
Только, наверное, если диск всего один, ошибка будет. Мне проверить негде.

PPS
Не вылазит ошибка даже если диск всего один. Я удалил у себя виртуальный CDROM и указал
Код: Выделить весь код
$Drive = DriveGetDrive('CDROM')

Последний раз редактировалось madmasles, 30-01-2010 в 14:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:33, 30-01-2010 | #6


Аватара для Creat0R

Must AutoIt


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

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


Цитата sashadeg:
Что это может значить? »
Там лишний слеш после $aDrives[$i].

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:03, 30-01-2010 | #7


Аватара для sashadeg

Старожил


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

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


Цитата madmasles:
У меня так находит. »
Да, классно, вот только если результатов будет несколько, то при нахождении первого сразу поиск останавливается... Ну в общем для меня это может даже и не проблема будет.
Спасибо. Полезное тебе сообщение

Не стесняйтесь, выкладывайте ещё свои примеры. Админ, не отмечай пока решенной, пожалуйста.

Цитата Creat0R:
Там лишний слеш после $aDrives[$i]. »
Да, вижу. Убрал - заработало. Вот только как теперь из этой таблицы вытащить значения?

-------
Ну вы ребята даёте...


Отправлено: 14:04, 30-01-2010 | #8


Аватара для madmasles

Ветеран


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

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


sashadeg,
Как я понял вариант должен быть единственным
Цитата sashadeg:
Имеются 2 одинаковых файла на компе под именем config.cfg
c:\windows\system\config.cfg
d:\prog\cstrike\cfg\config.cfg
и поиск должен выдать только второй путь из этих двух »
sashadeg,
В моем варианте после или вместо MsgBox(...) можно, например, FileWrite("my.txt", $aReturn[$i2] & @CRLF) написать.

PS
Чтобы поиск не останавливался, надо Exit убрать.

Последний раз редактировалось madmasles, 30-01-2010 в 14:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:10, 30-01-2010 | #9


Аватара для Creat0R

Must AutoIt


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

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


Можно ещё вот так, для надёжности (+ поиск только первого найденного файла):

Код: Выделить весь код
#include <Array.au3>

$aDrives = DriveGetDrive("FIXED")

For $i = 1 To UBound($aDrives) - 1
    $sReturn = _FileSearch($aDrives[$i], "config.cfg", "\cstrike\cfg\")
    If Not @error Then Exit MsgBox(64, 'Title', $sReturn)
Next

Func _FileSearch($sPath, $sFileMask, $sInPath = "")
    Local $iLen, $iPID, $sStdOutRead, $sRet, $aRet

    $iLen = StringLen($sInPath & $sFileMask)
    $iPID = Run(@ComSpec & ' /C Dir "' & $sPath & '\' & $sFileMask & '" /O:-D /S /B /A RASH', $sPath, @SW_HIDE, 6)

    While 1
        $sStdOutRead = StdoutRead($iPID)
        If @error <> 0 Then ExitLoop
        If $sStdOutRead = "" Then ContinueLoop

        If $sInPath <> "" And StringRight(StringStripWS($sStdOutRead, 2), $iLen) = $sInPath & $sFileMask Then
            StdinWrite($iPID)
            If ProcessExists($iPID) Then ProcessClose($iPID)
            Return $sStdOutRead
        EndIf
    WEnd

    Return SetError(1, 0, 0)
EndFunc
Цитата sashadeg:
как теперь из этой таблицы вытащить значения? »
Код: Выделить весь код
For $i = 1 To $aReturn[0]
      MsgBox(64, "", "Значение №" & $i & ": " & $aReturn[$i])
Next

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 30-01-2010 в 14:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:11, 30-01-2010 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Поиск по типу файла 7human7 Microsoft Windows 7 2 25-11-2009 09:51
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
CD созданные на компьютере с Windows XP не открываются на компьютере с Windows 98. Ivanov223 Microsoft Windows 2000/XP 5 14-04-2006 09:26
как запретить использование файла на другом компьютере? ghost99 Microsoft Windows 2000/XP 0 07-04-2006 11:49




 
Переход