If your track is on rock, using an engraver to carve a track is a lot faster than having masons building the tiles, but building gets the job done as well.
Personally I've never used branches, and Push carts along impulse ramp powered tracks.
You say you get a ! dir error: When does this happen? If it is at the departure, there is probably something wrong with the conditions set up for the Route Stop (not to be confused with a Track Stop). The Route Stop conditions specify direction to move in (N, E, S, W, empty), when to move (100% full, 50% full, etc), and how to move (Push, Guide, Ride). The defaults are usually not usable, but have to be modified to match your needs, and you probably want only one.
If you've got a branch you cannot just expect the dorf to guess which branch you want to take, so the Route would need to have a destination Route Stop (that is probably on top of a Track Stop set to dump the cart contents), i.e. two Route Stops, one for the start and one for the end. I've never done this myself, though. For a non branching track you could just let it end in a Track Stop that dumped the contents, but that would cause the empty cart to be carried (not guided) back to the starting stop. With a Route Stop on top of that Track Stop you should be able to order the dorf to guide the empty cart back to the start.