Войти

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


Pavlon
17-01-2011, 18:03
У меня запускается файл test.exe
Мне в батнике нужно прописать условие, что если запускается еще один такой файл test.exe, когда первый еще выполняется (там длительный процесс копирования) - то второй должен закрываться.

Что-то типа:

IF tasklist^|find /i "test.exe" GTR 1 goto:eof


Как правильно написать это условие?

Spooner
17-01-2011, 19:51
( tasklist | find "test.exe" >nul ) || test.exe

SendMessage
17-01-2011, 19:55
Мне в батнике нужно прописать условие, что если запускается еще один такой файл test.exe, когда первый еще выполняется (там длительный процесс копирования) - то второй должен закрываться. »
Запускается через батник? Тогда просто не давай ему запуститься.
tasklist | find /i "test.exe" || start "" "test.exe"
Или я не так понял?

Упс, припоздал. :)

Pavlon
17-01-2011, 21:55
Немного не правильно наверное объяснил :( сорри ...

Есть батник с функциями копирования - он скомпилирован в exe файл (test.exe) с помощью bat to exe converter. Работает скрытно от пользователей (только окно cmd с текстом "Подождите ...") и чтобы они не могли там настройки поменять. Он отрабатывает копирование какое-то время, в процессах висит его имя (test.exe). Пользователям иногда кажется что ничего не происходит и пытаются запустить его снова. Т.е. в одно и тоже время начинает отрабатывать один и тот же файл, а это допустить никать нельзя.

Нужно встроить проверку, что если такой процесс уже есть (test.exe) goto :eof.

amel27
18-01-2011, 04:51
если такой процесс уже есть (test.exe) goto :eof »
tasklist | find /i "test.exe" && goto:eof

Iska
18-01-2011, 06:21
amel27, так он ни разу не выполнится, ибо найдёт сам себя :). Наверное, где-то так:
@echo off
setlocal

set /a iCount = 0
for /f "usebackq" %%i in (`tasklist.exe /fi "imagename eq test.exe" /nh`) do set /a iCount += 1

if %iCount% geq 2 (echo Already running & goto :eof)

rem Реальные команды
ping.exe -n 10 -w 1000 localhost

endlocal
exit /b 0

amel27
18-01-2011, 07:36
Iska, точно :) тогда можно так:
tasklist | find /i /c "test.exe" | find /v "1" >nul&& goto:eof

Iska
18-01-2011, 08:07
Ну, вот :(. Я тоже вспомнил про «find.exe /v», но так и не сообразил, как можно избавиться от пустой строки в выводе tasklist :lol:. Спасибо.

Pavlon
18-01-2011, 12:31
Не работает данная команда:

tasklist | find /i /c "test.exe" | find /v "1" >nul&& goto:eof

процесс видит сам себя и закрывается.

amel27
18-01-2011, 12:37
процесс видит сам себя и закрывается »
не так - если он видит только себя, то продолжает выполнение (переходит на следующую команду), если видит кого-то ещё с таким же именем процесса, то закрывается (переходит в конец скрипта)

Pavlon
18-01-2011, 12:51
не так - если он видит только себя, то продолжает выполнение (переходит на следующую команду), если видит кого-то ещё с таким же именем процесса, то закрывается (переходит в конец скрипта) »

Да, все работает. Огромное спасибо.




© OSzone.net 2001-2012