Afghanistan finished their World Twenty20 campaign on a high as they stunned Group 1 winners West Indies by six runs in Nagpur to record their first victory over a Test-playing nation other than Bangladesh and Zimbabwe.

The Windies had won their previous three group matches, and seemed set to maintain their 100 per cent record when the associate minnows were restricted to 123 for seven.

But spinners Rashid Khan and Mohammad Nabi took two wickets each as the favourites, who rested star batsman Chris Gayle, limped to 117 for eight in reply.

Despite defeat, West Indies progress as group winners thanks to their superior run-rate over England, who will face New Zealand in the last four on Wednesday.

The result was no less than Afghanistan deserved after giving South Africa, Sri Lanka, and most notably England a major scare in their previous outings.

Having been put in to bat on a slow surface the Afghanistan innings got off to a sluggish start as Samuel Badree bowled Usman Ghani through the gate for four in the second over, although Mohammad Shahzad continued his impressive tournament with a six down the ground off Sulieman Benn.

Shahzad made 24 before hitting Badree back down the ground to Benn at mid-off as the leg-spinner (three for 14) conceded just six runs from first three overs, and although Asghar Stanikzai doubled that total by clearing long-on, he was caught by Dwayne Bravo off the following ball attempting to repeat the trick.

Samiullah Shenwari guided Benn to Darren Sammy at slip for one and Gulbadin Naib holed out to long-on in Sammy's first over for eight as the Afghan innings continued to lack impetus.

Najibullah Zadran duly upped the tempo with an unbeaten 48 from 40 balls, although he received little support as Andre Russell picked up two late wickets.

Afghanistan's chances of defending a meagre total looked remote when Amir Hamza shelled a return catch from Evin Lewis in the first over and Johnson Charles hit Nabi's first ball over midwicket for six before adding another later in the over by clearing long-on.

However, Lewis launched Hamza high to Rashid at midwicket for a seven-ball duck, and Hamid Hassan castled Charles for 22.

Andre Fletcher retired hurt with a hamstring problem and a Rashid googly bowled Marlon Samuels for five, before Bravo and Denesh Ramdin rebuilt with a 41-run stand.

Nabi had Bravo trapped lbw for 28, and Ramdin was stumped off Rashid's last ball charging down track to leave Afghanistan on top.

The momentum swung again when, with 29 needed from 20 balls, Hamid had to be taken out of the attack for bowling two no balls above waist height.

But the Windies stuttered as Russell was run out for seven by Shahzad after Sammy sent him back.

Carlos Brathwaite hit Gulbadin for two sixes in the penultimate over, with Sammy holing out to cover between them, to get the equation to 10 required from the last six deliveries.

But Nabi held his nerve superbly and once Brathwaite fell to a stunning catch by Najib at deep midwicket the game was effectively up.