Azure VM Scale Set is intended to scale in and scale out your VM.
For example: if we have VM A which runs our application and we start experiencing load, then if VM A is part of a scale set, Azure will spin up another VM (VM B) with the same application, so the load is distributed. When the load reduces, VM B will be "removed". The scale set gave you elasticity.
Example for using a scale set - we have a service that handles user registrations for a web application.
Azure Batch is intended for a different purpose.
First, a VM is always up and have some application running on it. With Azure Batch we are interested in performing a compute-intensive task and distribute the calculations across the nodes in the batch.
For example, run a daily job that requires 60 VMs to perform in a reasonable time. After the job finished, the VMs are deallocated.
Note that Azure batch is not a good fit for the user registration service - as this is something that takes many small request, not computation
So Azure batch is a service that spins off VMs, it can manage them (e.g what if one node fails) and a specific task that requires high computing power is run.