You can calculate the mean and std of the input data, sure.
That’s usually done for normalization.
However, BatchNorm is used between layers and normalizes the activations.
So iterating your whole dataset and update each BatchNorm layer separately will be very costly.
You would have to update layer by layer the running stats. After a weight update the stats will change and you would have to do it again.
In practice the momentum approach works quite well.