You can only batch static geometry, I believe - once it’s batched you can’t move the individual pieces without re-batching the entire thing. It’s meant to speed up stuff that’s draw-call heavy but never (or only very rarely) changes. And in your case, since your objects do not share the same material/texture, you can’t use it. If you carefully plan your models/materials/textures, it’s an option you have for speeding up lots of static geometry, but (as you’ve discovered) it has plenty of its own drawbacks as well.
As with all optimizations, profile, profile, profile. Time your code and see what (if anything) slows your game down. (I’ve learned this the hard way - no matter how well you know your code, the real slowdown often is not where/what you think it is. Save yourself lots of time and headaches by measuring first so you know what problem you’re really trying to solve before you try to solve it.) Unless you’ve got hundreds of the same geometry on screen at once, batching won’t gain you much of anything, and without profiling your code first to see where your real costs lie you’ll be guessing in the dark about what the real bottleneck is. If we’re only talking about a few dozen geometries here, then the time you will spend reworking things to make batching work will cost you far more time than it is worth.
Hope that helps.