The freak accident occurred shortly before noon on Tuesday at the Baar railway station, near Zug, where the 47-year-old man was unloading packages from a baggage car.
The man’s arm became stuck when the sliding doors of the carriage closed, Zug cantonal police said.
The train, operated by Swiss Federal Railways (SBB), departed with the driver and staff at the station apparently unaware of the man’s predicament.
The postal worker was dragged to the Zug station where he managed to extricate himself before collapsing onto an adjacent set of tracks, police said.
Swiss Federal Railways workers alerted the driver of another train to avoid it running over the man, whose legs were badly injured.
He was transported to Zug hospital before being transferred to a specialist clinic, police said.
The exact causes of the accident remain unclear and the case is under investigation by the Zug police force’s forensic service.
Passengers on the train involved in the accident, on the Zurich-Lucerne route, were transferred to other trains.