India's reward for a an 80-run victory over West Indies in the final Group B fixture is a World Cup quarter-final clash with defending champions Australia in Ahmedabad on Thursday.
Yuvraj Singh hit 113 in India's total of 268 all out, the mainstay of which was a 122-run third wicket stand with Virat Kohli (59).
Ravi Rampaul, who removed Sachin Tendulkar and Gautam Gambhir in a fiery opening spell, returned later to finish with one-day best figures of 5-51 as India failed to cash in on such a solid platform.
West Indies opener Devon Smith made 81 but his dismissal, bowled by Zaheer Khan (3-26) in the 31st over, prompted a collapse from 154-2 to 188 all out.
India's victory sees them finish second behind South Africa in Group B - and therefore take on Australia, the third-placed side in Group A, in the last eight on Thursday in Ahmedabad.
West Indies, meanwhile, end up in fourth spot and advance to a quarter-final meeting with Group A winners Pakistan in Dhaka on Wednesday.
The other two quarter-final matches are also now confirmed - South Africa face up to New Zealand in Dhaka on Friday and Sri Lanka are back on home soil in Colombo for Saturday's showdown with England.
Batting first after winning the toss, India made a steady start despite Tendulkar (2) and Gambhir (22) falling early to Rampaul, making his first start of the tournament in place of the injured Kemar Roach.
Yuvraj and Kohli kept the West Indies bowlers at bay with their positive batting and reached their half-centuries, and soon brought up their century stand.
India advanced to 160-2 in 30 overs and appeared to be switching gear, but Rampaul cleaned up Kohli (59 off 76) to allow West Indies to regain a foothold.
Yuvraj, along with Mahendra Singh Dhoni, attempted to maintain the momentum by adding 45 in 9.2 overs before leg-spinner Devendra Bishoo had the India captain stumped for 22.
By then Yuvraj had moved past his best World Cup score - 83 against Bermuda in 2007 - and six overs later reached his 13th one-day century off 112 balls.
Yuvraj lost his partner Suresh Raina - caught by Rampaul off Darren Sammy - and a couple of overs later a sharp return catch from Kieron Pollard ended his terrific innings.
With Yusuf Pathan still at the crease India looked for a late blitz, but Rampaul yorked out the big hitter and along with Russell (2-46) polished off the tail.
India were bowled out in 49.1 overs, with the last seven wickets falling for just 51.
In reply the West Indies made an assured start with opener Smith dropping anchor after the dismissal of Kirk Edwards (17) and Darren Bravo (22) by the 19th over.
Smith reached 50 off 64 balls and along with Ramnaresh Sarwan added 63 from 13.3 overs to keep them in the hunt, needing 115 needed off 120 for victory.
A bowling change did the trick for India as Zaheer and Harbhajan Singh dismissed Smith and Pollard respectively to leave West Indies on 157-4.
The collapse continued when Devon Thomas was stumped by Dhoni off Yuvraj and captain Sammy was run out a couple of overs later, leaving Sarwan with only the tail for support.
Yuvraj ended Russell's stay and the Caribbean team had lost five wickets for 11 runs in under seven overs.
With 101 needed off 12 overs with three wickets remaining, Sarwan and new man Sulieman Benn took the batting powerplay, but the left-hander became Zaheer's second wicket as the Windies slid to 179-8.
Sarwan's attempt to pull off an unlikely victory was halted by Zaheer before the right-hander had made 39 off 68.
The end came when local boy Ravi Ashwin cleaned up Rampaul with the final ball of the 43rd over.