Unless you have a good match between layers (similar number of features with similar locations), Spatial Join is likely the tool to use.
We were able to use this with point features by running multiple spatial joins - first run for close proximity; second run with a larger search distance; so on as the data needed. Between each run, calculate the attributes for those with matches and flag them to mark both that it is done and the quality of the match. Repeat, but query out those features already done, as necessary.
Our layers were geocoded points matched to inconsistent, inaccurate general locations based on PLSS data. Because many points matched multiple others, running through the batch manually ended up a part of the task. Though this is indeed time consuming, it resulted in a rather accurate layer.