|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск файла на компьютере |
|
|
[решено] Поиск файла на компьютере
|
![]() Старожил Сообщения: 379 |
Не знаю, возможно ли это но всё таки...
Возможно ли такое чтобы скрипт провёл поиск на компьютере оперделённого файла? Например нужно найти вот такой файл: "\cstrike\cfg\config.cfg" при чём, как вы видите две последних папки известны, а вот где лежит папка "cstrike" это нужно определить и получить весь путь к файлу "config.cfg" Вот такая задача =/ |
|
------- Отправлено: 22:29, 29-01-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Прежде чем искать файл, следовало бы поискать решение на форуме.
|
------- Отправлено: 22:50, 29-01-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 379
|
Профиль | Отправить 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 А что если я не знаю даже на каком из дисков лежит этот файл? Результатов может быть целая куча, но мне нужно только те что имеют в пути к файлу вот такой фрагмент \cstrike\cfg\config.cfg Например, Имеются 2 одинаковых файла на компе под именем config.cfg c:\windows\system\config.cfg d:\prog\cstrike\cfg\config.cfg и поиск должен выдать только второй путь из этих двух |
------- Отправлено: 08:14, 30-01-2010 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата sashadeg:
Цитата sashadeg:
#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 |
||
------- Отправлено: 12:18, 30-01-2010 | #4 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать |
|
------- Отправлено: 12:58, 30-01-2010 | #5 |
Ветеран Сообщения: 812
|
Профиль | Отправить 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 Только, наверное, если диск всего один, ошибка будет. Мне проверить негде. PPS Не вылазит ошибка даже если диск всего один. Я удалил у себя виртуальный CDROM и указал |
Последний раз редактировалось madmasles, 30-01-2010 в 14:30. Отправлено: 13:33, 30-01-2010 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата sashadeg:
|
|
------- Отправлено: 14:03, 30-01-2010 | #7 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать Цитата madmasles:
Спасибо. Полезное тебе сообщение ![]() Не стесняйтесь, выкладывайте ещё свои примеры. Админ, не отмечай пока решенной, пожалуйста. Цитата Creat0R:
![]() |
||
------- Отправлено: 14:04, 30-01-2010 | #8 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать sashadeg,
Как я понял вариант должен быть единственным Цитата sashadeg:
В моем варианте после или вместо MsgBox(...) можно, например, FileWrite("my.txt", $aReturn[$i2] & @CRLF) написать. PS Чтобы поиск не останавливался, надо Exit убрать. |
|
Последний раз редактировалось madmasles, 30-01-2010 в 14:24. Отправлено: 14:10, 30-01-2010 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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:
|
|
------- Последний раз редактировалось Creat0R, 30-01-2010 в 14:35. Отправлено: 14:11, 30-01-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Поиск по типу файла | 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 |
|