India 186 for 5 (Suryakumar 61*, Rahul 51, Williams 2-9) beat Zimbabwe 115 (Burl 35, Raza 34, Ashwin 3-22) by 71 runs
Suryakumar Yadav's astonishing death-overs hitting launched India to a commanding 186 for 5 - Suryakumar's share being 61 not out off 25. India's quicks then shut the game down quickly, reducing Zimbabwe to 28 for 3 by the end of the powerplay, then 36 for 5 soon after.
There were patches of Zimbabwe resistance. In India's innings, Sean Williams and Sikandar Raza combined to take a wicket in each of the 12th, 13th and 14th overs. Then Raza and Ryan Burl put on 60 off 35 for the sixth wicket, though Zimbabwe's run rate never really caught up to the requirement.
But otherwise, India crushed it. KL Rahul hit his second successive fifty, making 51 off 35. Virat Kohli reclaimed his spot atop the tournament run-getters list with his 26 off 25.
Then Arshdeep Singh and Bhuvneshwar Kumar used swing beautifully to take a wicket in each of their first overs, before Mohammed Shami and Hardik Pandya also got among the wickets. R Ashwin finished things off, taking 3 for 22 from his four overs. The result was a 71-run victory.
Suryakumar's spectacular fine-leg hits
Where do you bowl to Suryakumar? England will now have to try to figure this out before their semi-final on Thursday.
There was a gorgeous six over extra cover off Tendai Chatara to close out the 18th over, but the more impressive shots came over fine leg. Zimbabwe stacked the off side and tried to go full and wide to Suryakumar. The batter, though, kept throwing his front leg away to the offside, sometimes as far as the wide markers on the crease. Then he swept two of those balls with such immense power as to almost defy physics, all the way over the fine-leg boundary.
Last ball of the innings was another wide full toss, but because fine leg was back for this, Suryakumar went with more of a scoop, shovelling it over his left shoulder, the ball carrying just over the rope once again.
Rahul gets India humming
It had been Rahul who did most to give Suryakumar the platform, though. Having batted out a maiden against Richard Ngarava first up, he hit a six way over deep square leg midway through Ngarava's next over, and seemed in good touch from then on.
There were two more sixes, both down the ground, the second of which brought up his half-century. But in between, plenty of smart running, particularly in the company of Virat Kohli.
Zimbabwe's brief squeeze
Despite Rahul's fifty, Zimbabwe did launch a fightback, between the 12th and 15th overs. Williams first got Kohli out, having him caught at long-off. Next over, Raza dismissed Rahul, slowing the ball up, and having him give a high catch to long-off again, when Rahul had tried to repeat the six that had taken him past fifty, previous ball.
The third wicket was down to an outstanding running catch from Burl, who was at long-on to left-hander Rishabh Pant. Pant nailed one flat and hard off the bowling of Williams, but Burl sprinted full tilt along the boundary to get both hands to it, completing the catch with a dive.
India's quicks blast out Zimbabwe's top order
After India had hit 83 runs off the last six overs of their innings, India's seamers made a Zimbabwe win all but impossible inside the powerplay. A late-swinging Bhuvneshwar delivery was almost middled by Wessly Madhevere, but not far away from Kohli at short cover, who took a sharp catch diving low to his right.
Next over, Arshdeep swung one through the defences of Regis Chakabva. Then late in the powerplay, Williams slashed one to deep third. When Hardik Pandya had Craig Ervine caught and bowled in the seventh over, and Shami nailed Tony Munyonga in front the over after that, the road was too steep.
Even Burl and Raza's excellent stand never really threatened.
Andrew Fidel Fernando is ESPNcricinfo's Sri Lanka correspondent. @afidelf