
Rohit Sharma, Virat Kohli and KL Rahul all managed just a single apiece as India were reduced to five for three by New Zealand pacemen Trent Boult and Matt Henry in pursuit of a target of 240.
Jimmy Neesham then held a superb one-handed catch at backward point to dismiss Dinesh Karthik (six) off Henry to leave India’s bid to reach the final in turmoil after 10 overs.
New Zealand should have had a fifth wicket when India all-rounder Hardik Pandya, on 18, clipped fast bowler Lockie Ferguson’s first ball to midwicket, only for Neesham to drop a far easier chance than the one he held to get rid of Karthik.
Sharma began the procession of top-order dismissals when he edged a fine Henry delivery that curved away to wicketkeeper Tom Latham.
Kohli fell next, lbw to a superb inswinger from left-armer Boult.
Kohli reviewed but replays upheld English official Richard Illingworth’s original out decision on umpire’s call and, to the despair of the massed ranks of India fans in the ground, the star batsman had to go.
India were then five for three when Rahul was brilliantly caught by a diving Latham following an edge off Henry.
At that stage, India, two-time world champions, had lost three wickets for one run in 10 balls against 2015 runners-up New Zealand.
Henry took three wickets for 23 runs in his opening seven-over spell and Boult one for 15 in his first six.
Earlier, New Zealand added 28 runs in the remaining 23 balls of their innings to finish on 239-8 after rain had stopped play on Tuesday.
Ross Taylor, who resumed on 67 not out, top-scored with 74 after New Zealand captain Kane Williamson, who won the toss, had made 67 in awkward conditions for batting.
The winners of this match will face either hosts England or reigning champions Australia, who play at Edgbaston on Thursday, in Sunday’s final at Lord’s.