Войти

Показать полную графическую версию : [решено] Батник поиск->запуск


Harik
26-05-2011, 12:24
Всем доброго времени суток. Возникла задачка. Нужно написать батник, функция которого - поиск конкретной программы. Местонахождение по условиям задачи не известно. Через tasklist произвести поиск на предмет присутствия приложения в списке задач. Если программа запущена, то всё ок, ECHO "сообщение". Если программа не запущена, то выполнить её запуск. Так вот, сопсно, не могу сообразить, как это прописать. Помогите плз

amel27
26-05-2011, 16:51
Местонахождение по условиям задачи не известно. »странная постановка задачи - в интернете икать?.. имя известно?

Harik
26-05-2011, 17:04
имеется ввиду, неизвестно, на каком диске располагается программа и в каком каталоге. Слишком просто было бы, зная весь путь. Имя известно. В принципе, по скольку задача абстрактная, то это может быть любой исполнительный файл. Однако, как описано выше, батнику не нужно говорить прямой путь к файлу. Он его должен найти по критерию "имя файла"

Harik
26-05-2011, 23:17
параллельно вопрос возник. Почему программа запускается в фоновом режиме?
at xx:xx:xx "c:\program files\winamp\winamp.exe" /play "C:\Users\Public\Music\Sample Music\Maid with the Flaxen Hair.mp3"
at xx:xx:xx taskkill /f /im winamp.exe

amel27
27-05-2011, 12:47
Слишком просто было бы, зная весь путь. »пример поиска файла по всем дискам (включая сетевые):@Echo Off
Set EXE=Notepad.EXE
(WMIC Path CIM_DataFile Where "Extension='EXE' AND Name LIKE '%%\\%EXE%'" Get Name /Value
)|Find "="
Pause>Nul

Foreigner
27-05-2011, 17:26
Почему программа запускается в фоновом режиме? »
Потому что у программы at.exe есть параметр /interactive, который позволяет видеть окно приложения, запущенное в окружении SYSTEM.
at /?

sov44
27-05-2011, 22:58
amel27, у меня скрипт выдаёт ошибку (Window XP SP3). Можно ли сделать поисковик, чтобы в командной строке вбивать искомый файл, а в итоге получить пути, где он найден.

Foreigner
27-05-2011, 23:45
sov44,
Попробуйте так:

@echo off
setlocal

set /p file="File to find: "

call:search "%file%"
goto:eof

:search

set "name=%~n1"
set "ext=%~x1"
set "wmic=wmic datafile where (filename="%name%" AND extension="%ext:~1%") get name /value"

for /f "tokens=2 delims==" %%i in (' "%wmic%" ') do echo %%i

sov44
27-05-2011, 23:57
Не могу увидеть работу скрипта, выскакивает ошибка ( см. пост 7)

amel27
28-05-2011, 07:08
у меня скрипт выдаёт ошибку (Window XP SP3) »проблема не в скрипте, а в системе (конкретно - служба WMI), подробную инфу ищите в журналах событий
по вопросам оздоровления Windows - в другую ветку ;)

Harik
29-05-2011, 16:37
более менее адекватный скрипт Foreigner'а
@echo off
setlocal

set /p file="File to find: "

call:search "%file%"
goto:eof

:search

set "name=%~n1"
set "ext=%~x1"
set "wmic=wmic datafile where (filename="%name%" AND extension="%ext:~1%") get name /value"

for /f "tokens=2 delims==" %%i in (' "%wmic%" ') do echo %%i


Однако не могу запустить программу при условии её нахождения. Наверное я что-то не так делаю!?
if exist "%file%" start "%file%" else echo "%file%" missing

Foreigner
29-05-2011, 18:14
Забыли кавычки для заголовка:

if exist "%file%" start "" "%file%" ...

Harik
30-05-2011, 19:02
Забыли кавычки для заголовка:
Код:
if exist "%file%" start "" "%file%" ... »

какого заголовка? что-то я не совсем понял...

Foreigner
30-05-2011, 19:56
Harik,
Команда start интерпретирует первую пару кавычек, как заголовок будущего окна. Поэтому start "%file%" запустит еще один экземпляр cmd с заголовком %file% ( или значением этой переменной если она определена ), а не программу из этой переменной, как вы ожидали.




© OSzone.net 2001-2012