South Africa crumbled from 116 for one to 191 all out in good batting conditions at The Oval before Shikhar Dhawan (78) and Virat Kohli (76 not out) shared a fluent partnership of 128 to lead India to victory with 12 overs to spare.
The defending champions followed hosts England and Bangladesh into the last four and they will be joined by the winners of Monday’s final Group B game between Sri Lanka and Pakistan.
“Our bowlers bowled really well and the fielders backed it up. It was a complete performance in the field — we grabbed the chances that came our way,” captain Kohli said at the presentation ceremony.
“The guys really stepped up with their intensity.”
South Africa started cautiously after being sent in to bat as Hashim Amla and Quinton de Kock added 76 for the first wicket without undue alarm.
Amla raised the tempo with a six over mid-wicket but, on 35, he tried to cut spinner Ravichandran Ashwin and nicked a sharp catch to wicketkeeper Mahendra Singh Dhoni.
South Africa were 94 for one after 20 overs and De Kock reached a tidy half-century off 68 balls before he was deceived by spinner Ravindra Jadeja and bowled for 53.
South Africa then pressed the self-destruct button with two run-outs in quick succession.
Captain AB de Villiers, on 16, perished trying to pinch a quick single and David Miller (one) was dismissed in farcical circumstances with both batsmen stranded at the same end to leave South Africa struggling at 142 for four.
Their hopes of a substantial total rested on the shoulders of Faf du Plessis but his scratchy knock of 36 ended when he dragged a ball from medium-pacer Hardik Pandya on to his stumps.
Chris Morris, Andile Phehlukwayo, Kagiso Rabada and Morne Morkel soon joined him back in the pavilion and the innings petered out in the 45th over when Imran Tahir became the third run-out victim.
India began their reply positively and both openers had struck sixes before Rohit Sharma drove loosely at Morkel and was caught by wicketkeeper De Kock for 12.
Kohli joined Dhawan and after surviving hostile spells from Morkel and Rabada the pair started to play with more freedom.
Dhawan crunched Morris over mid-on for his eighth four to reach his 50 and the left-hander played some brutal strokes before he skied Tahir to Du Plessis at long-off.
Kohli remained in total control, however, and Yuvraj Singh hoisted JP Duminy over mid-wicket for a huge six to complete the most comfortable of wins for his team.
“It’s not an ideal way to finish the tournament,” De Villiers said. “It’s disappointing, but credit to them. They put a lot of pressure on us.
“We got something nice going until the run-outs which cost us highly today. We just came unstuck against a better team.”
(Editing by Clare Fallon)