Я пытаюсь изменить отличный код для многопоточных пакетных команд, с помощью dbenham: Параллельное выполнение процессов оболочки (не нужно читать, чтобы решить мою проблему).
Этов настоящее время принимает команды от чтения файла ссылки. Я хочу вместо этого отправить команды через аргументы. Для этого в основном потребуется только один цикл for.
Проблема заключается в том, что независимо от того, какие варианты я пробую, я не могу получить правильное разбиение цикла for. Я явно пропускаю что-то базовое с разделителями или что-то еще, несмотря на то, что я несколько раз читал документациюВероятно, это довольно тривиально для более опытного пакетного сценария, который я ожидаю, но я полностью застрял ...
Я уверен, что единственное, что нужно изменить, - это единственный оператор for:
(фрагмент multithread.bat)
for /f "tokens=* delims=:" %%A in ('findstr /b ":::" "%~f0"') do (
В настоящее время выполняется следующее: «Поиск в файле вызывающего скрипта (из% ~ f0) любых строк, начинающихся с :::, и создание каждой из этих %%А в цикле ". Это прекрасно работает, но ...
Я хочу изменить это так, чтобы вместо этого брать строки (команды) из аргументов, предпочтительно просто анализируя% * (все аргументы). Формат ввода и порядок аргументов произвольны, поэтому не стесняйтесь менять его по своему усмотрению, если в этом есть смысл.
Позвольте мне проиллюстрировать на базовом примере, как это может выглядеть на практике:
(основной скрипт - для иллюстрации)
::these are the commands we want to run, ideally I'd like to support an arbitrary number of them
set command1="rclone size remote1:"
set command2="rclone size remote2:"
set command3="rclone size remote3:"
call multithread.bat /O 2 %command1% %command2% %command3%
:: /O indicates we ask for more verbose output from the command controller
:: 2 indicates the desired max amount of conurrently running threads
:: We just want to skip these in the for-loop as they are picked up elsewhere in the script.
Так как же должен выглядеть этот цикл for, чтобы %% A был командой 1,2,3 (и т. Д., Если больше команд)? Например, при первом запуске цикла %% A в этом примере должно быть:
rclone size remote1:
then ...
rclone size remote2:
во второй раз и т. Д.