The Proteas had already qualified for the last-4 ahead of the game against Zimbabwe, but victory means they top Group 1 and face a New Zealand side they beat by seven wickets in the first group stage on February 14.
Zimbabwe won the toss and elected to bat first, but were restricted to 153 for seven in their 20 overs, a target South Africa chased down with 13 balls to spare.
The Zimbabwe innings was anchored by the excellent Sikandar Raza, who scored 73 from 43 balls, which included four sixes.
An unbeaten 26 from 20 balls from Clive Madande was the next highest score in the innings as Zimbabwe’s batters generally battled to score quick runs and perished.
South Africa shared the wickets around, but young speedster Kwena Maphaka was the pick of the bowlers with 2-21 in his four overs, while all-rounder Corbin Bosch took 2-40 in four.
Raza followed up his batting with an excellent spell with the ball as he kept Zimbabwe in the hunt with figures of 3-29 in four, including the wickets of Quinton de Kock (0), Aiden Markram (4) and innings top-scorer Dewald Brevis (42 from 18 balls).
But the other members of the attack battled to stem the run-rate and despite the loss of wickets, South Africa never truly looked in trouble in their chase.
"Nice to get the win, it can be a tricky one when you change the team a bit and the boys haven't really been playing," South Africa captain Markram said.
"The boys really stepped up today. We would have liked to be more clinical with the bat, but it was probably a good thing that the middle order was put under a bit of pressure and came through it."
Aside from Maphaka, South Africa also gave runs to fast bowler Anrich Nortje and spinner George Linde, who have not featuered much in the tournament to date.
"The least you can do is give opportunities to guys who have been working really hard behind the scenes. At least if we need them they have had a game.
"It is really exciting to have a semi-final in Kolkata against New Zealand. The boys will be up for it, you look at playing one really good game of cricket and the result takes care of itself. But you need to put in 40 good overs."
