The defending champions looked set for a comfortable victory in Pool B when they reduced West Indies to 85-7.
But captain Jason Holder made a brilliant 57 at number nine to stretch the total to 182, before India faltered to 107-5 in reply.
It was left to skipper MS Dhoni to see India home with a composed unbeaten 45.
Despite the modest target, India were in trouble with Jerome Taylor (2-33) and Kemar Roach (1-44) dismantling the top order.
But just as he did in the 2011 World Cup final, and in countless other one-day internationals, captain Dhoni guided India to victory under substantial pressure.
As well as guaranteeing their qualification for the knockout stages, India are now in pole position to finish top of Pool B, having won all their matches and with only fixtures against Ireland and Zimbabwe remaining.
West Indies meanwhile are far from certain to advance from the group, having won just two of their five matches.
Their fate will depend on the results of the remaining matches involving Ireland and Pakistan, and may come down to net run rate.
But despite the two sides’ contrasting fortunes, India’s victory was far from straightforward as they allowed West Indies to turn a one-sided contest into a scrap.
West Indies won the toss and chose to bat, having scored more than 300 in every previous match in this tournament in which they had batted first.
But that total was never on the cards after a shambolic performance from the top order.
With the new ball swinging prodigiously, Dwayne Smith, Chris Gayle and Denesh Ramdin perished to reckless shots – and in between Marlon Samuels was run out – as they collapsed to 35-4.
Fast bowler Mohammed Shami (3-35) returned from injury to torment West Indies with three wickets as the Caribbean side were bundled out for 182 after opting to bat first.
Shami, who missed India’s win against the United Arab Emirates with a knee injury on Saturday, put West Indies on the backfoot early by dismissing hard-hitting openers Dwayne Smith (six) and Chris Gayle (21) with the new ball.
Shami and fast bowling partner Umesh Yadav (2-42) started well, bowling fast and short on the WACA pitch, considered the quickest in the world, as India dominated the explosive West Indies batting lineup.
Gayle, who hit the World Cup’s highest individual score of 215 against Zimbabwe last week, offered two difficult chances before he pulled Shami straight to Mohit Sharma at deep square leg. He was also guilty of running out Marlon Samuels (2).
Wickets continued to fall at regular intervals, but Holder batted superbly with some support from Darren Sammy (27) to reach a respectable total.
The target seemed unlikely to test India, but after they lost Rohit Sharma and Shikhar Dhawan early to the impressive Taylor, they wobbled.
Andre Russell removed Virat Kohli (33) and Ravindra Jadeja (13), and Ajinkya Rahane (14) nicked behind, but West Indies could not prise the nerveless Dhoni from the crease.
India captain MS Dhoni: “It was a difficult wicket, with movement and bounce early on. There was a bit of swing for their fast bowlers but I don’t think it misbehaved as much as it did in the first 10 overs of the first innings. Our bowlers stuck to their line and lengths. A lot of batsmen got out to short-pitched balls.
“Overall I was very happy with the performance. It is always a difficult target. You don’t really know whether you want to go and play your big shots. Our lower middle order has not really been tested. Jadeja will have to step up, because it is a very important slot and if he can contribute more we will be a very solid batting line-up.”
West Indies captain Jason Holder: “I have no regrets about batting first. I always thought the wicket was going to be a good one. The batsmen did not stick around long enough. We didn’t apply ourselves well enough and never caught up in the game.
“My plan was to bat the overs but I thought we needed runs for our net run-rate. Unfortunately I gave away my wicket at the end.
“I am pleased with my form at the moment but it is a team game. We have been lacking a complete game.”