Можно сделать это так же как это:
ECHO Start of Loop
FOR /L %i IN (1,1,5) DO (
ECHO %i
)
Эти 1,1,5 декодируются как:
(start,step,end)
Также отметьте при встраивании этого в пакетный файл необходимо будет использовать двойной знак процента (%%) для добавления префикса переменных, иначе интерпретатор команд попытается оценить переменную %i до выполнения цикла.
Необходимо постараться не помещать команды в переменные.
Если пробелы - то, что сбивает Вас с толку, можно разделить их как это:
ps -o pid,pcpu,cmd -C ${2// }
Это разделит все пробелы, хотя, поэтому если какая-либо из Ваших командных строк содержит пробелы, это разрушит их. Это разделит продвижение и конечные пробелы и пробелы по обе стороны от запятых:
commands=${2/# } # leading space
commands=${command/% } # trailing space
commands=${command/, /,} # spaces after commas
commands=${command/ ,/,} # spaces before commas
ps -o pid,pcpu,cmd -C "$commands"
Если Вы хотите возвратить ошибку вместо того, чтобы санировать и выполнить вход, просто сделайте то удаление пространства или другую очистку и проверку, чтобы видеть, равен ли результат входу. Если они затем не производятся ошибка.
Это могло работать с для цикла
arguments="command1 command2 command3 command4 command5"
for arg in $arguments
do
ps -o pid,pcpu,cmd -C $arg
done
результаты:
ps -o pid,pcpu,cmd -C command1
ps -o pid,pcpu,cmd -C command2
ps -o pid,pcpu,cmd -C command3
ps -o pid,pcpu,cmd -C command4
ps -o pid,pcpu,cmd -C command5
Возможно, могли Вы давать лучший реальный пример того, как он должен работать, что является Вами ожидающий... это не выглядит слишком ясным мне.
Для вызова его из командной строки путем, я объяснил в комментарии, просто используют $*
поймать все аргументы передало.
for arg in $*
do
ps -o pid,pcpu,cmd -C $arg
done
затем назовите его как это:
./test.sh command1 command2 command3 command4 command5 command6
и это выполнит команду PS с каждым аргументом.