Does #Batch only support cross-org data migrations?

No. The most common use of #Batch is running high-performance data operations within the same Salesforce org. This is done by using a Connection with Is Current Org enabled, so the batch runs in the context of the running user.

In addition, #Batch also supports seamless cross-org data synchronization, making it a unified solution for both internal and multi-org use cases.