Defending a modest 162-run score, Indian bowlers, led by Harbhajan Singh (three for 35) bundled out the islanders for 146.
It was after the Indian innings crumbled against the guiles of Dwayne Smith and Chris Gayle on a sub-standard pitch with only Sachin Tendulkar (65) and Harbhajan Singh (37) standing tall among the ruins.
India now plays Australia on Friday, which is a virtual semifinal.
If rain doesn't interrupt this match, the winner will move to the final to face the West Indies.
In what was an inconsequential tie for them, the West Indies chasing 163, opened with new pair of Shivnarine Chanderpaul and Runako Morton.
The two batted with caution and the islanders went to the supper break at 34 for no loss in nine overs. But it was after the beak that the match turned on its head.
Munaf Patel bowled in the right areas with lots of fire and the Gujarat paceman soon got the breakthrough when Chanderpaul's attempted pull shot only to give Sehwag some catching practice at square leg.
Munaf struck again, this time with a beautiful snorter pitched at good length and Ramnaresh Sarwan, completely at bay, edged the delivery with extra bounce to keeper Dhoni.
The two wickets charged up the Men-in-Blue who now were smelling blood.
S Sreesanth, playing his first match with a point to prove, maintained good line and pace. His efforts were rewarded when Morton edged one to the first slip but Rahul Dravid fumbled with the ball and bounced it off to Dhoni who completed the catch on rebound.
Ajit Agarkar got Marlon Samuels plumb in front of wicket as the ball pitched on the dangerous ridge kept alarmingly low. Chris Gayle came to bat at number five but the new spot didn't suit him as he too was out lbw to RP Singh. At 70 for 5, the match was evenly balanced but skipper Lara was yet to come.
West Indies procession of wickets didn't stop here either. Next man in Dwayne Smith unleashed a volley of fours for a brief period but was out lbw to Agrakar.
Bravo was stumped by Dhoni for 10 and West Indies were in real trouble at 96-7.
Lara came well down the order with an innings repair mission.
Wavell Hinds held out doggedly for 57 balls scoring only 8 before falling caught and bowled to Harbhajan Singh. Harbhajan struck again removing Carlton Baugh. All this while Lara had looked in prime touch scoring 40 runs and threatening to spoil the Indian party.
India needed just one wicket at this time and Lara was doing well to shield his number eleven Corry Collymore. Lara gave strike to Collymore on the last ball of 41st over by Sreesanth. Collymore was hit on pads and was given out to a ball that looked to crash stumps and Indian camp erupted into celebrations.
Earlier, Sachin Tendulkar made a valiant 65 as Team India folded for a paltry 162. The Indian top-order crumbled once again and skipper Rahul Dravid, vice-captain Virender Sehwag, Suresh Raina and Yuvraj Singh all went back to pavilion falling to Smith. And it was left to Master Blaster and Harbhajan Singh (37) to help India avoid some real embarrassment.
India lost two quick wickets after deciding to bat first on winning the toss. Opener Dravid edged Smith to keeper Carlton Baugh for a duck in the first over itself. while Sehwag followed him in the third over castled by the same bowler.
Raina, promoted up the order, looked to consolidate with Sachin but fell to Smith for 11. Yuvraj Singh, who made a three-ball duck in the last match against Australia, fared slightly better and survived four balls this time for another naught.
Mahendra Singh Dhoni tries to blast his way hitting three fours off Collymore in one over. But Collymore had the last laugh when he castled him for 18 off 13 balls (4x4).
However, Sachin was unfazed and so were his trade mark cover drives and flick off the pads. Sachin found an ideal partner in Harbhajan Singh who showed enough resilience to hang in there.
Harbhajan chanced his arms too, hitting two sixes when the ball was in the slot to hit. Harbhajan and Sachin raised India's only fifty-run partnership of the innings.
Harbhajan was undone by Baugh for 37. Harbhajan and Sachin added 78 runs for the seventh wicket.
Sachin, who had played a faultless knock met a tragic end when he was run out. RP Singh hit Samuels straight back to the bowler who just guided the ball to stumps at runner's end. Sachin was short of crease and went out for 65 off 102 balls with seven well timed hits to fence.
Not much resistance was on offer from the remaining batsmen as the Indian innings folded at 162 in just 39.3 overs.
Earlier, India made one change bringing in Sreesanth for Irfan Pathan. West Indies also brought in Collymore and Runako Morton.