Consider using multiple workflows:
Workflow 1: Custom Start accepts filename and other necessary parameters. Does whatever work you want done with that file. Processes a single file.
Workflow 2-N: Monitor (file/folder) object that when triggered does any filtering required and then triggers Workflow 1 with the file name of the file to process. If multiple files are found by the monitor these would trigger Workflow 1 multiple
times, once for each file. So be sure to set the number of concurrent workflows for Workflow 1 to match what you would expec the collective load of Workflow 2-N to produce on Workflow 1.