|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск и запуск приложения согласно условию If... |
|
|
[решено] Поиск и запуск приложения согласно условию If...
|
Ветеран Сообщения: 842 |
Помогите грамотно и сжато написать скрипт, который попытается запустить приложение согдласно условию...
Например, найти @ProgramFiles\Cubase\Cubase.exe или @ProgramFiles\Cubase 4\Cubase.exe или @ProgramFiles\Cubase\Cubase4.exe или @ProgramFiles\Cubase 4\Cubase4.exe если error=1 то продолжить работу скрипта.... ну или Exit При первом совпадении нужно выйти из "цикла", чтобы не сработало дважды... То-есть, нашёл, запустил, и продолжил далее скрипт... Хотя гуру, конечно могут посоветовать regexp парисногом искать часть имени, я не против, это даже лучше! Пожалуйста не придирайтесь, я действительно не шарю в логических построениях... Мне очень надо! |
|
------- Отправлено: 21:57, 30-12-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Примерно так:
Но если этот список может изменяться (например вместо 4 будет другое значение), то нужно будет выполнить поиск и перебор файлов. |
------- Отправлено: 22:17, 30-12-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать semiono, Тема решена?
|
------- Отправлено: 12:20, 05-02-2010 | #3 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Это хорошее решение! Только я с дальнейшими действиями запарился поэтому пока до этого не доходило.
Но вот вернулся, лучше бы это переделать если возможно, чтобы искать только ....[test]Cubase[/test].... & .exe Ато вариантов многовато может быть относительно первого поста, имя же файла всегда точно определено, если отсечь (пробел)4.exe и путь C:\~..\..\ Я вдобавок хотел бы чтобы в случае ненахождения батник запускался, обычно у меня в system32 лежит одноимённый батник system32\cubase.cmd который так же запустит приложение. Поэтому, очень хотелось бы чтобы расширение exe и cmd поддерживались одновременно. Но скрипт так же должен завершиться при запуске первого совпадения. Я вот тут взял скриптик для поиска, правда для другой цели, чуть исправил... http://forum.oszone.ru/thread-166317.html $path = @ScriptDir & "\Plugins" $sFile = FileList($path, "*.inf") If $sFile[0]>0 Then For $i=1 To $sFile[0] Run('rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 ' & $sFile[$i]) Next EndIf Func FileList($sPath, $inFilter = '*', $exFilter = '');$includeFilter='*.txt,*.htm' $excludeFilter='www,asp,desktop' $sPath = StringRegExpReplace($sPath, '\\+$', '') Local $aRetArray[1], $sFindNextFile, $sCurrentPath, $iFL Global $FolderList[2] $aRetArray[0] = 0 $FolderList[0] = 1 $FolderList[1] = $sPath Local $sFindFirstFile = FileFindFirstFile($sPath & "\*") If @error = 1 Then Return SetError(1, 0, -1) #Region If StringRight($inFilter, 1) = ',' Then $inFilter = StringTrimRight($inFilter, 1) $inFilter = StringReplace($inFilter, '^', '\^') $inFilter = StringReplace($inFilter, '.', '\.') $inFilter = StringReplace($inFilter, '(', '\(') $inFilter = StringReplace($inFilter, ')', '\)') $inFilter = StringReplace($inFilter, '[', '\[') $inFilter = StringReplace($inFilter, ']', '\]') $inFilter = StringReplace($inFilter, '+', '\+') $inFilter = StringReplace($inFilter, '$', '\$') $inFilter = StringReplace($inFilter, '*', '.*') $inFilter = '(?i)^' & StringReplace($inFilter, ',', '$|^') & '$' If StringInStr($exFilter, ',') > 0 And $exFilter <> '' Then If StringRight($exFilter, 1) = ',' Then $exFilter = StringTrimRight($exFilter, 1) $exFilter = StringReplace($exFilter, ',', '|') $exFilter = StringReplace($exFilter, '.', '\.') $exFilter = StringReplace($exFilter, '(', '\(') $exFilter = StringReplace($exFilter, ')', '\)') $exFilter = StringReplace($exFilter, '[', '\[') $exFilter = StringReplace($exFilter, ']', '\]') $exFilter = StringReplace($exFilter, '+', '\+') $exFilter = StringReplace($exFilter, '$', '\$') $exFilter = '(?i)(' & StringReplace($exFilter, '^', '\^') & ')' EndIf #EndRegion $iFL = 1 Do $sFindFirstFile = FileFindFirstFile($FolderList[$iFL] & "\*") If @error = 0 Then While 1 $sFindNextFile = FileFindNextFile($sFindFirstFile) If @error = 1 Then ExitLoop $sCurrentPath = $FolderList[$iFL] & "\" & $sFindNextFile If StringInStr(FileGetAttrib($sCurrentPath), "D") Then;папка $FolderList[0] += 1 If UBound($FolderList) < $FolderList[0] + 1 Then ReDim $FolderList[$FolderList[0] + 1000] $FolderList[$FolderList[0]] = $sCurrentPath Else;файл If StringRegExp($sFindNextFile, $inFilter) = 1 And ($exFilter = '' Or StringRegExp($sFindNextFile, $exFilter) = 0) Then $aRetArray[0] += 1 If UBound($aRetArray) < $aRetArray[0] + 1 Then ReDim $aRetArray[$aRetArray[0] + 1000] $aRetArray[$aRetArray[0]] = $sCurrentPath EndIf EndIf WEnd EndIf FileClose($sFindFirstFile) $iFL += 1 Until $iFL > $FolderList[0] ReDim $aRetArray[$aRetArray[0] + 1] ReDim $FolderList[$FolderList[0] + 1] Return $aRetArray EndFunc ;==>FileList И в данном случае применить для запуска Cubase 4.exe который надо найти на диске и запустить? PS для inf файликов, если не затруднит тоже поправте скрипт, если возможно что-то там упростить? |
------- Последний раз редактировалось semiono, 11-02-2010 в 03:32. Отправлено: 03:22, 11-02-2010 | #4 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать semiono,
У меня так получилось: $aReturn = _FileSearch(@ProgramFilesDir, "Cubase*.exe") If $aReturn[0] = 0 Then Run(@SystemDir & '\Install.cmd', "", @SW_HIDE) Else Run($aReturn[1]) EndIf Exit Func _FileSearch($sPath, $sFileMask) Local $sOut = StringToBinary("0" & @CRLF, 2), $aOut Local $hDir = Run(@ComSpec & ' /U/C DIR "' & $sPath & '\' & $sFileMask & '" /S/B/A-D', @SystemDir, @SW_HIDE, 6) While 1 $sOut &= StdoutRead($hDir, False, True) If @error Then ExitLoop WEnd $aOut = StringRegExp(BinaryToString($sOut, 2), "[^\r\n]+", 3) If @error Then Return SetError(1) $aOut[0] = UBound($aOut) - 1 Return $aOut EndFunc ;==>_FileSearch PS Попробовал добавить к цифре в имени Cubase1.exe еще цифры и буквы(только латинские). У меня скрипту все равно, какие символы и сколько их между Cubase и .exe, он все равно его находит и запускает. PPS Поправил. Теперь и русские буквы отображаются нормально. |
|
Последний раз редактировалось madmasles, 17-02-2010 в 00:17. Отправлено: 02:46, 12-02-2010 | #5 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Большое спасибо, madmasles!
Цитата madmasles:
![]() Цитата madmasles:
Забавно что у меня никак не работает вообще, ищу ошибку пока... ![]() Так тоже не работает: $aReturn = _FileSearch(@ProgramFilesDir, "\Cubase*.exe") $aReturn = _FileSearch(@ProgramFilesDir, "\Cubase\Cubase*.exe") кстати это так должно быть: Run(@SystemDir & '\Cubase.cmd', "", @SW_HIDE) Причём и батник лежит @SystemDir & "\Cubase.cmd" и в реестре прописано HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Cubase.exe и прога просто названа @ProgramFilesDir & "\Cubase\Cubase.exe" и тишина ![]() У меня папка @Program Files находится внутри @WindowsDir, но никогда проблем не было, тем более что у меня FAT32. Правда msi инсталяторы бывает, что глючат да ито весьма редко... |
||
------- Последний раз редактировалось semiono, 13-02-2010 в 01:45. Отправлено: 01:22, 13-02-2010 | #6 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать semiono,
Ошибка была в коде. Я его поправил. Сейчас у меня находит с пробелами. |
Отправлено: 01:39, 13-02-2010 | #7 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Вау, у меня пошло! Интересно где тогда пробел был?
![]() ![]() Но зато работает пока первый тест! |
------- Отправлено: 01:50, 13-02-2010 | #8 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать semiono,
Под пробелом я имел в виду Cubase 678.exe. Такой, кстати, тоже находит. PS Я Вам советую организовать дополнительную проверку имени Cubase*.exe или самого файла, например по версии или еще как-нибудь, так как функция находит любые exe-шники начинающиеся с Cubase.... То есть если первым найдет, например, какой-нибудь cubasease.exe, то его и запустит. |
Последний раз редактировалось madmasles, 13-02-2010 в 18:07. Отправлено: 01:57, 13-02-2010 | #9 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать в случае с Cubase.cmd какая-то проблемма!
![]() If $aReturn[1]="" Then If ^ ERROR Error: Array variable has incorrect number of subscripts or subscript dimenition range exceeded. zzCubase.exe - действительно мною переименован, чтоб протестировать батник. |
------- Отправлено: 00:06, 17-02-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как организовать поиск нужного диска и запуск с него приложения? | Nun-Nun | Скриптовые языки администрирования Windows | 16 | 28-05-2009 22:12 | |
Прочие - удалённый запуск/завершение приложения | danya_rus | Программное обеспечение Windows | 0 | 27-05-2009 18:48 | |
Запуск терминального приложения | Rulezzz2 | Microsoft Windows NT/2000/2003 | 2 | 11-03-2009 16:00 | |
Интерфейс - [решено] Поиск файлов из приложения | bofi | Microsoft Windows 2000/XP | 2 | 06-10-2008 18:37 | |
запуск DOS приложения | Pupil | Microsoft Windows 2000/XP | 8 | 29-12-2003 12:42 |
|