![]() |
Поиск и запуск приложения согласно условию If...
Помогите грамотно и сжато написать скрипт, который попытается запустить приложение согдласно условию...
Например, найти @ProgramFiles\Cubase\Cubase.exe или @ProgramFiles\Cubase 4\Cubase.exe или @ProgramFiles\Cubase\Cubase4.exe или @ProgramFiles\Cubase 4\Cubase4.exe если error=1 то продолжить работу скрипта.... ну или Exit При первом совпадении нужно выйти из "цикла", чтобы не сработало дважды... То-есть, нашёл, запустил, и продолжил далее скрипт... Хотя гуру, конечно могут посоветовать regexp парисногом искать часть имени, я не против, это даже лучше! Пожалуйста не придирайтесь, я действительно не шарю в логических построениях... Мне очень надо! |
Примерно так:
Но если этот список может изменяться (например вместо 4 будет другое значение), то нужно будет выполнить поиск и перебор файлов. |
semiono, Тема решена?
|
Это хорошее решение! Только я с дальнейшими действиями запарился поэтому пока до этого не доходило.
Но вот вернулся, лучше бы это переделать если возможно, чтобы искать только ....[test]Cubase[/test].... & .exe Ато вариантов многовато может быть относительно первого поста, имя же файла всегда точно определено, если отсечь (пробел)4.exe и путь C:\~..\..\ Я вдобавок хотел бы чтобы в случае ненахождения батник запускался, обычно у меня в system32 лежит одноимённый батник system32\cubase.cmd который так же запустит приложение. Поэтому, очень хотелось бы чтобы расширение exe и cmd поддерживались одновременно. Но скрипт так же должен завершиться при запуске первого совпадения. Я вот тут взял скриптик для поиска, правда для другой цели, чуть исправил... http://forum.oszone.ru/thread-166317.html Код:
$path = @ScriptDir & "\Plugins" И в данном случае применить для запуска Cubase 4.exe который надо найти на диске и запустить? PS для inf файликов, если не затруднит тоже поправте скрипт, если возможно что-то там упростить? |
semiono,
У меня так получилось: Код:
$aReturn = _FileSearch(@ProgramFilesDir, "Cubase*.exe") PS Попробовал добавить к цифре в имени Cubase1.exe еще цифры и буквы(только латинские). У меня скрипту все равно, какие символы и сколько их между Cubase и .exe, он все равно его находит и запускает. PPS Поправил. Теперь и русские буквы отображаются нормально. |
Большое спасибо, 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,
Ошибка была в коде. Я его поправил. Сейчас у меня находит с пробелами. |
Вау, у меня пошло! Интересно где тогда пробел был? :) У меня нету пробелов в системе :)
Но зато работает пока первый тест! |
semiono,
Под пробелом я имел в виду Cubase 678.exe. Такой, кстати, тоже находит. PS Я Вам советую организовать дополнительную проверку имени Cubase*.exe или самого файла, например по версии или еще как-нибудь, так как функция находит любые exe-шники начинающиеся с Cubase.... То есть если первым найдет, например, какой-нибудь cubasease.exe, то его и запустит. |
в случае с Cubase.cmd какая-то проблемма! :(
Код:
If $aReturn[1]="" Then Код:
@if "%1"=="-r" shutdown -r -f -t 00 & goto sh |
semiono,
Извините. Я так увлекся поиском, что не проверил скрипт в случае, если файла нет. Я код поправил(в очередной раз :)). Сейчас должен работать. |
madmasles, во-первых работает, во-вторых очень оперативно! Я уже хотел отказаться от батников,
думал овета не скоро дождусь, так как уже пару дней прошло, видимо ночами работаешь!? :) +1 |
Надо усложнить код! Я бы сразу сказал да не думал, что вообще результат будет такой хороший :)
Почему-то не пошло так $aReturn = _FileSearch(@ProgramFilesDir, StringSplit("Cubase*.exe|Nuendo*.exe","|")) // мои сочинения ))) Вообщем надо две проги запустить, всё одинакого в обоих случаях, третью прогу не надо, две хватит! :) |
semiono,
Так найдите сначала одну - запустите, потом вторую, третью... и .тд. |
Код:
$aReturn = _FileSearch(@ProgramFilesDir, "Cubase*.exe") |
semiono,
Вы напишите в какой последовательности и какие программы должны запускаться. |
1 = Cubase.exe 2 = Nuendo.exe, но это не важно, и я переделать смогу
--- я тоже кодю сам тока безрезультатно пока.. If ProcessExists($aReturn) = -1 Then )))) |
semiono,
Нет, давайте конкретно. 1. Если есть Cubase.exe, то запускается Cubase.exe и выход. 2. Если Cubase.exe нет, то ищем Nuendo.exe, нашли - запускаем и выход. 3. Если нет не того не другого, то что запускаем? Вот так у меня получилось: Код:
$aReturnCubase = _FileSearch(@ProgramFilesDir, "Cubase*.exe") Я поправил код. |
Цитата:
--- Я извиняюсь, наверное цикл не совсем верный, оба приложения открываются. В конце Run(@SystemDir & '\Nuendo.cmd', "", @SW_HIDE) очевидно сработает при любом условии, но даже если закоментировать всёравно что-то не то. |
semiono,
Цитата:
Нашли Cubase*.exe - запустили его, вышли. Нет Cubase*.exe, нашли Nuendo*.exe - запустили его, вышли. Ничего не нашли - сообщили об этом и вышли. |
Время: 06:38. |
Время: 06:38.
© OSzone.net 2001-