Sri Lanka will meet Pakistan, who defeated South Africa on Thursday, in Sunday’s final at Lord’s (1400GMT).
Man-of-the-match Tillakaratne Dilshan came within four runs of the first century of the tournament, batting through the innings to finish on 96 not out from 57 balls in Sri Lanka’s 158 for five.
Angelo Mathews then clean-bowled Xavier Marshall, Lendl Simmons and Dwayne Bravo for ducks in an astonishing first over which effectively ended West Indies’s run chase before it had begun.
Chris Gayle played a captain’s role with no support from the other end.
He missed more than usual and was lucky not to become Mathews’s fourth victim when he almost played on to the stumps but survived to carry his bat for 63 from 50 balls. No other batsman reached double figures.
Earlier, Sri Lanka openers Dilshan and Sanath Jayasuriya put on 73 for the first wicket before the latter was dismissed for a subdued 24.
Captain Kumar Sangakkara fell for a second-ball duck and Mahela Jayawardene made only two in West Indies’ best passage of play.
Dilshan remained unruffled throughout. He struck Gayle for the first six of the innings, stroked three fours off a Kieron Pollard over and a further three off Bravo.
Jerome Taylor disappeared for six over mid-wicket and Mathews lent late assistance with a six and a four as Sri Lanka added 60 in the last five overs.
“I thought the total we got was a very challenging one and we owe everything to Dilshan for the way he set it up,” Sangakkara told a news conference.
“There are always areas we would like to improve and brush up but today was a near flawless effort from our bowlers.”
But there was a sting in the tail for the winners who were fined for bowling one over short during the allotted time. Sangakkara was fined 10 per cent of his match fee and the rest of the team five percent.
Editing by Dave Thompson