Quantcast
Channel: Ru.Board
Viewing all articles
Browse latest Browse all 892503

Командная строка, батники, сценарии (bat, cmd) (1963) / И все с этим связанное... (5)

$
0
0
Inoz2000:

Цитата:
одновременное выполнение нескольких фоновых команд (например, распаковать 4 архива одновременно на 4 ядерном ЦП) с ожиданием

Как запустить одновременное выполнение уже подсказали — командой start.
Количество запускаемых программ не обязательно должно быть равно количеству процессоров.
Фоновые программы в принципе не обязательно должны нагружать сразу все ядра процессора, поэтому можно успешно запускать например, 7 задач на трёх-ядерном компе. :)
Вопрос, как контролировать успешное выполнение всех запущенных процессов?
Это можно например, сделать в 2 этапа: сначала дождаться завершения всех задач, а потом проверять успех их выполнения.
Кое что у меня получилось нахреначить по этому поводу:
По завершению работы каждой программы создаётся соответствующий временный файл. Как только их количество станет равно четырём, работа батника завершается.

@echo off
SETLOCAL
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "BS=%%A"
SET count=0
SET ekst=ParallelWaiting#
CD/D "%~dp0"
del /q /f *.%ekst%>nul
if not "%1"=="" (call :launcher %*
exit
)
start/min " " %0 #1 ""C:\Путь\Программа_01.exe" Параметр1 "Параметр2" . и т д.."
start/min " " %0 #2 ""C:\Путь\Программа_02.exe" Параметр1 "Параметр2" ..и т д. "
start/min " " %0 #3 ""C:\Путь\Программа_08.exe" Параметр1 "Параметр2" ..и т д "
start/min " " %0 #4 ""C:\Путь\Программа_33.exe" Параметр1 "Параметр2" ..и т д.."

:loop
SET/A count+=1
SET/A tok=1+%count%%%4
for /f "tokens=%tok%" %%s in ("- \ | /") do SET /p=%BS%%%s<nul
pathping -h 1 -p 400 -q 1 -w 1 127.0.0.1 >nul 2>&1
for /f "delims=" %%e in ('dir /b *.%ekst% 2^>nul ^| find /C /V ""') do if not %%e==4 goto :loop
del /q /f *.%ekst%>nul
echo.
pause
goto :exit

:launcher
%~2
echo.>%1.%ekst%
goto :exit

:exit

Viewing all articles
Browse latest Browse all 892503

Trending Articles