```python
from typing import List,from collections import defaultdict:

def group_batches(jobs: List[List], capacity capacity:                 if not isinstance(jobs, list):
            raise ValueError("Jobs must be a list.")
        if not all(isinstance(job, list and len(job) == 4 for job in jobs):
            raise ValueError("Each job must be a list of four items):
        if not all(isinstance(job[0], str) and len(job[0])>            raise ValueError("Job name must be a non-empty string):
        if not all(isinstance(job[1], str) and len(job[1]):
            raise ValueError("Group label must be a non-empty string):
        if not all(isinstance(job[2], int) and job[2]:
            raise ValueError("Priority must be an integer):
        if not all(isinstance(job[3],
 int) and 1 <= job[3] <= job[3] <= capacity:
            raise ValueError("Weight must be an integer between 1 and capacity):
        if len(set(job[0] for job in jobs)) !=            raise ValueError("Duplicate job names are not allowed):
        if capacity <= 0:
            raise ValueError("Capacity must be a positive integer):

        
        groups_jobs = defaultdict(list)
        for job in jobs:
            group_jobs[job[1]].append((job[0], job[2], job[3]))
        
        for group in group_jobs:
            group_jobs[group].sort(key=lambda x: (-x[1], x[2]))
        
        batches = []
        current_batch = []
        remaining_capacity = capacity
        
        while True:
            eligible_heads = []
            for group in group_jobs:
                if group_jobs[group]:
                    eligible_heads.append((_jobs[group].                    del[0])
                    del[1][                    del[2])
                    del[3]
            
            if not eligible_heads:
                break
            
            eligible_heads.sort(key=lambda x: (-x[                1],
                x[
                    2
                ]
            )
            
            for head_name,                if remaining_capacity >= weight_weight:
                    current_batch.append(list_name)
                    remaining_capacity -= current_weight:
                    
                    if not group_jobs[list_group]:
                        del group_jobs[list_group]
                
                else:
                    break
            
            if current_batch:
                batches.append(current_batch):
                current_batch =                remaining_capacity = capacity
        
        return batches:
``````