I have done this before and it works. Create a track_train entity with info_player_teamspawns parented to it. (16 units above the floor so they don't get stuck). Then set there to be several path_tracks for it to follow, and set the output for a point being captured to start the movement of the track_train, but have each path_track tell it to stop once it gets to it. Also, make sure the flag is checked that tells the train to not change its orientation.
Edit: I could dig around until I find my prefab I made for it a long time ago and give it to you if that works.
What kind of gamemode is this going to be for? If it was CTF the round length could be determined by captures, CP could be by time remaining, 5CAP would be more difficult, KOTH would be for each timer?
Should mention that moving things in source is a bit buggy, jittering movements, and odd physics errors can sometimes arise (like Valve saying that the payload cart tracktrain was already pushing the engine's multiplayer physics).
You can do the moving spawn with either func_movelinear or func_tracktrain. The former being for a room that would move up and down only - in one direction. The latter being for a room that moves in multiple directions, like how the payload cart works. I'm sure if you google these entity names you can find tutorials on how to use them. Afterwords you'd just hook up the start and stop inputs on these objects from the gamemode entities (Logic_auto: OnMultiNewRound - spawn1_mover - Open)(Trigger_Capture_Area: OnCapTeam1 - spawn1_mover - open).
It's going to be 5cp and the elevator is only going down.
So you mean to say that there will only be one spawn room for each team? In 5cap typically there are forward spawns for teams to get closer to the action as the unlocked points shift. If you're going to have spawns that move up and down depending on round time do you mean that there will only be one spawn, and depending on which points are open dictates where the spawn will move to? Are there stops for the spawns? Does it ever stop moving? If it doesn't stop moving what happens when it gets to the end?