¿sabe si hay una manera simple de ejecutar el comando FOR en un archivo por lotes en varios subprocesos? ¿Cuál es el punto de tener 4 núcleos si no puedo ejecutar mis tareas en 4 hilos paralelos?
Por ejemplo, si estoy optimizando PNG con PNGOUT, el comando que usaría es
for %i in (*.png) do pngout "%i"
Pero esta es una tarea altamente paralelizable en la que las subtareas no dependen entre sí en absoluto.
Para ejecutar esto en 4 'colas', escribiría algo como
for -thread 4 %i in (*.png) do pngout "%i"
¿Necesito escribir mi propia aplicación similar que pueda hacer esto o hay una solución gratuita disponible?
batch
automation
Axarydax
fuente
fuente
Respuestas:
Hace un tiempo escribí un archivo por lotes que ejecuta solo un número máximo de comandos en Desbordamiento de pila: ejecución paralela de procesos de shell :
fuente
find /c /v ""
.Los archivos por lotes son para secuencias de comandos extremadamente básicas y no admiten ningún tipo de subprocesamiento múltiple. Tendría que escribir su propia utilidad para hacer lo que desea lograr.
Alternativamente, Windows PowerShell puede proporcionar más capacidades para acercarte a tu objetivo.
Si simplemente desea ejecutar varias operaciones al mismo tiempo, puede usar el comando start para iniciar la utilidad PNGOUT en una nueva ventana. El bucle FOR continuará sin esperar a que finalice cada operación.
La línea modificada se vería así:
Sin embargo, tenga en cuenta que esto lanzará efectivamente PNGOUT para TODOS los archivos en el directorio al mismo tiempo, lo que probablemente no sea deseable.
fuente