Знаете ли вы, если есть простой способ запустить команду FOR в пакетном файле в нескольких потоках? Какой смысл иметь 4 ядра, если я не могу выполнять свои задачи в 4 параллельных потоках?
Например, если я оптимизирую PNG с помощью PNGOUT, я бы использовал команду
for %i in (*.png) do pngout "%i"
Но это очень параллелизуемая задача, в которой подзадачи вообще не зависят друг от друга.
Чтобы запустить это в 4 «очереди», я бы написал что-то вроде
for -thread 4 %i in (*.png) do pngout "%i"
Нужно ли мне писать свое собственное приложение, которое могло бы сделать это, или есть бесплатное решение?
batch
automation
Axarydax
источник
источник
Ответы:
Я написал пакетный файл, который некоторое время назад выполняет только максимальное количество команд в Stack Overflow: Параллельное выполнение процессов оболочки :
источник
find /c /v ""
.Пакетные файлы предназначены для очень простых сценариев и не поддерживают никакой многопоточности. Вам нужно написать свою собственную утилиту, чтобы делать то, что вы хотите достичь.
Кроме того, Windows PowerShell может предоставить больше возможностей, чтобы приблизить вас к цели.
Если вы просто хотите запустить несколько операций одновременно, вы можете использовать команду start для запуска утилиты PNGOUT в новом окне. Цикл FOR будет продолжен без ожидания завершения каждой операции.
Модифицированная строка будет выглядеть так:
Однако обратите внимание, что это эффективно запустит PNGOUT для ВСЕХ файлов в каталоге одновременно, что, скорее всего, нежелательно.
источник