Kohli’s side avoided the embarrassment of an early exit as they survived a do or die showdown to advance from Group B in style.
In-form opener Dhawan was the key figure with 78 from 83 balls, including 12 fours, while captain Kohli weighed in with a typically elegant 76.
India join England and Bangladesh in the semi-finals, with the remaining place in the last four going to the winner of Monday’s Group B meeting between Sri Lanka and Pakistan.
Kohli’s men will face Group A runners-up Bangladesh in Birmingham on Thursday as they bid to make the final for the fourth time.
South Africa could have no complaints as they limply departed the tournament after a second successive defeat.
They will need a far more determined effort to prosper when they face England in one-day and Test action shortly.
Quinton de Kock’s 53 was the only score of any substance from the spineless South Africans, who had three men run out in a wretched performance.