Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Условие на кол-во процессов (http://forum.oszone.net/showthread.php?t=196892)

Pavlon 17-01-2011 18:03 1590879

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

Что-то типа:

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


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

Spooner 17-01-2011 19:51 1590942

( tasklist | find "test.exe" >nul ) || test.exe

SendMessage 17-01-2011 19:55 1590946

Цитата:

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

Запускается через батник? Тогда просто не давай ему запуститься.
Код:

tasklist | find /i "test.exe" || start "" "test.exe"
Или я не так понял?

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

Pavlon 17-01-2011 21:55 1591032

Немного не правильно наверное объяснил :( сорри ...

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

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

amel27 18-01-2011 04:51 1591181

Цитата:

Цитата Pavlon
если такой процесс уже есть (test.exe) goto :eof »

Код:

tasklist | find /i "test.exe" && goto:eof

Iska 18-01-2011 06:21 1591201

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 1591222

Iska, точно :) тогда можно так:
Код:

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

Iska 18-01-2011 08:07 1591230

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

Pavlon 18-01-2011 12:31 1591370

Не работает данная команда:

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

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

amel27 18-01-2011 12:37 1591377

Цитата:

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

не так - если он видит только себя, то продолжает выполнение (переходит на следующую команду), если видит кого-то ещё с таким же именем процесса, то закрывается (переходит в конец скрипта)

Pavlon 18-01-2011 12:51 1591387

Цитата:

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

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


Время: 06:07.

Время: 06:07.
© OSzone.net 2001-