Sri Lanka could only post 113-9 after captain Chamari Atapattu fell for 33, with spinner Radha Yadav claiming 4-23.
India’s 16-year-old opener Shafali Verma smashed 47 off 34 balls in reply before she was run out.
Jemimah Rodrigues and Deepti Sharma both made 15 not out to see India to 116-3 with 32 balls to spare.
India have won all four of their group games and will face the team that finishes second in Group B in the second semi-final at the Sydney Cricket Ground on Thursday.
The winner of the final Group A match between hosts Australia and New Zealand will join India in the semi-finals after the Kiwis eliminated Bangladesh earlier on Saturday.
Sri Lanka, who were already eliminated before this game, will finish their campaign against Bangladesh on Monday.
- TMS podcast: Do the semi-finals beckon for England?
- Relive India’s win with in-play highlights
- T20 World Cup – fixtures, results, reports and scorecards
- Injured Pakistan captain Bismah ruled out of tournament
Verma stars again
Verma has been one of the most compelling players in the tournament so far, with her aggressive approach at the top of the order helping India post three totals their opponents could not overhaul.
Here India had to chase for the first time but Verma ensured they were never really under pressure, striking several stunning shots down the ground, including a big six, and shuffling across her stumps to open up gaps on the leg side at will.
Sri Lanka will rue dropping her twice, on five and 13 – Kavisha Dilhari shelling a simple catch at extra cover before spinner Sathya Sandeepani could not hold on to a caught and bowled chance.
Verma quickly capitalised to put her side well ahead of the required run-rate, despite Smriti Mandhana falling for 17, with India skipper Harmanpreet Kaur hitting a mighty six before holing out for 15.
Verma looked on course for her first half-century of the tournament, only to be run out after hesitating on a sharp single, but by then Rodrigues and Sharma were able to play with minimal fuss, save for Atapattu dropping an easy chance to remove Rodrigues for 11.
That capped a frustrating day for the Sri Lanka skipper, who struck five fours and one six before picking out square leg.
Her dismissal saw Sri Lanka’s innings stall, losing five wickets for just 32 runs as India’s spinners took control, before Dilhari made an enterprising 25 not out off 16 balls to help her side to a respectable, if below par, total.
Despite elimination, Sri Lanka still have plenty to play for in their final match, with the winner securing automatic qualification to the next T20 World Cup.
‘We can’t lose momentum’ – reaction
India captain Harmanpreet Kaur: “You have to keep that momentum and not lose it at any cost.
“Shafali Verma is someone who loves to play big shots, we don’t want to stop her as cricket is all about enjoying the moment. She’s doing well for the team and I hope she can continue.”
India spinner Radha Yadav, who took 4-23: “I was just thinking I needed to bowl stump-to-stump.”
Sri Lanka captain Chamari Atapattu: “The score was not enough to defend, but we dropped a couple of chances, we know Shafali is a young talent and we couldn’t stop her.
“I got a good start but unfortunately I got out in 10 overs, I need to stay there for 16 or 17 overs. If I stay there, we could get 150-plus. I hope our batting is better against Bangladesh.”