Luckily for the Caribbean side, they still made enough runs to finish on top of group one.
The West Indies rested star batsman Chris Gayle for the game, with Evin Lewis handed a debut. It was a move the backfired with Lewis out for a seven-ball duck to Hamza in the third over.
Johnson Charles was then knocked over for 22 by Hamid Hassan, and the Windies came undone from three, with Andre Fletcher leaving the field injured and Marlon Samules bowled by Rashid Khan before the score had passed 50.
Dwayne Bravo (28 off 29) and Denesh Ramdin (18 off 24) then steadied the ship with a 41-run partnership.
It was Mohammad Nabi who got the breakthrough for Afghanistan, trapping Bravo in front of the stumps to leave the Windies at 4-79 after 14 overs. Ramdin was stumped off Rashid two overs later and wickets fell regularly from there.
In the end the Windies needed 10 runs from Nabi’s final over, a task that proved seven runs too many, with Carlos Brathwaite falling to a stunning catch on the ropes.
Sent in to bat first, Afghanistan set the West Indies a target of 124, with man of the match Najibullah Zadran making an unbeaten 48 off 40, rescuing the side from a perilous position at 4-52 after 10.2 overs.
West Indies captain Darren Sammy:
“We’re disappointed, but we’re not going to let it dampen our spirits. They played well and we need to find a way to chase down those small totals.
“We have a semi-final and we’re looking forward to that. We’ve done the most important part, which is get through to the last four.
“We were just looking to win the match. It would have been good to win all four, but we understand that this was the only one we could afford to lose in terms of winning the trophy.”
Afghanistan captain Asghar Stanikzai:
“Winning this match very important, we needed one win in this tournament after missing two good chances to get one. Today the guys played really well. We thought we might be short 15 runs or so, but we still bowled very well and fielded very well, Najib especially.”