Chasing only 182 to win, India cantered home in 35 overs, with Shikhar Dhawan hitting 68 and Virat Kohli a sparkling unbeaten 58.
Earlier, Mahendra Dhoni's side took advantage of the damp conditions in Cardiff to reduce Sri Lanka to 41-3, effectively 41-4 after Tillakaratne Dilshan retired with a calf injury.
Angelo Mathews made 51 and Mahela Jayawardene 38 as Sri Lanka fought back, but India's spinners found turn to restrict Mathews' men to 181-8.
Any comfort that Sri Lanka could have taken from the difficult batting conditions was dismissed by Dhawan and Rohit Sharma, who shared 77 for the first wicket.
Then, when Rohit was needlessly bowled swiping at Mathews, Kohli arrived to take India to a date with the hosts at Edgbaston on Sunday.
England made the most of the help given to their pace bowlers in a similarly one-sided semi-final victory over South Africa on Wednesday, but if they were hoping for more of the same in Birmingham, India proved that they can adapt to traditional English conditions.
The most impressive side in the tournament to date, India had built their three previous victories on the prolific opening pair of Dhawan and Rohit, the spin of Ravi Jadeja and some lively fielding.
Here, their seam attack came to the fore, as Bhuvneshwar Kumar, Umesh Yadav and Ishant Sharma all found movement from the pitch to virtually eradicate run-scoring from the early part of Sri Lanka's innings.