India won the toss at Edgbaston and reached 314-9, with opener Rohit Sharma scoring a 92-ball 104 — his record-tying fourth century of the tournament. Seamer Mustafizur Rahman took 5-59. Bangladesh was 286 all out in reply with Shakib Al Hasan again providing the main resistance with a 74-ball 66 including six fours.
Sabbir Rahman (36 in 36 balls) and Mohammad Saifuddin (51 not out off 38 balls) started to hit out and looked dangerous as they took Bangladesh from 179-6 to 245-7, leaving 70 runs required in around seven overs.
The defeat ended any semifinal hopes for seventh-place Bangladesh, which has seven points from eight games. "We're desperate to do well in this competition and try and take it further. Ultimately, today wasn't to be," Bangladesh coach Steve Rhodes said. "We pushed through, but I think we made some early mistakes, and I think you need to get out of the blocks really well against a team like India, and we were playing catch-up for a lot of that match.
"We gave them a bit of a shock, but ultimately it was too hard work at the end." India, champions in 1983 and 2011, has 13 points, one behind leader Australia, and plays Sri Lanka in its final game at Headingley on Saturday.
Sharma and Lokesh Rahul shared the highest opening stand for this tournament of 180. But Bangladesh struck back to reduce India to 237-4 when Mustafizur's double-wicket maiden claimed Virat Kohli on 26 and Hardik Pandya for a two-ball duck.
Sharma's ton matched Sri Lanka great Kumar Sangakkara's record of centuries at a single World Cup in 2015. After he was out, Rahul went shortly afterward for 77, also in 92 deliveries. Rishabh Pant added a 41-ball 48.
Mustafizur dismissed Mohammed Shami on the last ball of the innings to finish with a five-for. Shakib, the top-ranked ODI allrounder, took 1-41 in 10 overs and then top-scored in Bangladesh's reply. Bangladesh had proved it can reel in large totals, pulling off the second highest successful run chase in tournament history — 322 — to beat the West Indies by seven wickets with eight overs left. But the Indian bowlers provided tougher opposition and pacer Jasprit Bumrah mopped up with wickets in the 48th over, the last of the match.
"Whenever I practice in the nets, I practice each and every situation, be it with the new ball, be it with the old ball, bowling at the death," said Bumrah, who bowled four batsmen. "So if I've ticked all of the boxes in the net, so in the match it's all about execution and keeping a clear head."
It worked as Bumrah ended on 4-55 and Pandya took 3-60. India is through but Bumrah does not want to be rested against Sri Lanka. "This is my first World Cup, so I want to play as many games as possible. I don't think I've become an experienced player that I could say I don't want to play some games," Bumrah said. "I always look forward to playing, and the more number of matches you play, you enjoy more."
More AP cricket: www.apnews.com/cricket and https://twitter.com/AP_Sports