Batch renderer stops after one render
I'd suggest using handlers for this task.  Below is a script that adds a full set of render handlers, and prints the name of the handler when that event happens.

import bpy

frame_handlers = [name for name in dir(bpy.app.handlers)
                  if name.startswith("render")]

def handler_function(name):
    def handler(scene):
        print(name)

    return handler

for name in frame_handlers:
    handler = getattr(bpy.app.handlers, name, None)
    if handler is not None:
        handler.append(handler_function(name))


Experiment and see the order the handers are called firing  "render_init"... etc until, "render_compete"

Setting it up

In Operator execute, set the scene settings to first batch, call the render op and add the render_complete handler.

# add the handler.
   bpy.app.handlers.render_complete.append(render_complete)


The render complete handler 

change scene settings to the next batch item and call render op again

You will need to keep tabs on which batch is rendered with an active_index property (or similar), (also handy for displaying the items in a UIList widget)  Please note this is just code typed into answer and not tested.

def render_complete(scene):
    batches = scene.frame_ranges
    i = batches.active_index
    if i &lt; len(batches) - 1:
        batch = batches(i+1)
        # set up scene 
        bpy.ops.render.render('INVOKE_DEFAUT', animation=True)
    else:
        #clear this hander
        bpy.app.handers.render_complete.remove(render_complete)


Experiment...