|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 | |
|