With the win, the defending champions ended their miserable title defence on a high and confirmed their Champions Trophy participation — finishing seventh in the 10-team table — that will take place in Pakistan in 2025.
Denying the 1992 champions the miracle they needed to make it to the last four of the showpiece 50-overs tournament, England produced superb efforts with both bat and ball in their third win.
Stokes, who came out of ODI retirement for the World Cup, scored 84 while Joe Root hit 60 to lift England to an impressive 337-9 in their 50 overs before Pakistan folded on 244 in 43.3 overs.
Willey, who already announced he will retire from international cricket after the World Cup, removed Pakistan openers Abdullah Shafique (nought) and Fakhar Zaman (one) before dismissing Agha Salman for 51 to finish with 3-56.
With Salman’s wicket, Willey also completed 100 wickets in his 73rd ODI.
As It Happened
Fellow fast bowler Gus Atkinson (2-45) had Babar Azam for 38, caught at short mid-wicket off a miscued pull to end the Pakistan skipper’s below-par tournament on 320 runs with four fifties but without a century.
Spinners Moeen Ali (2-60) and Adil Rashid (2-55) took care of the middle-order as only Salman defied the bowling with a fighting 45-ball knock studded with six boundaries and a six.
Tail-enders Shaheen Shah Afridi scored 27 and Haris Rauf made 35 to at least take Pakistan past the 200-mark.
Ali removed Mohammad Rizwan for a 51-ball 36 and Iftikhar Ahmed for three while Rashid had Saud Shakeel bowled round his legs for 29 before bowling Shadab Khan for four with a googly.
Pakistan started the day needing to beat England by 287 runs in order to squeeze into the semi-finals on net run-rate but that escape route was immediately closed when Jos Buttler won the toss and chose to bat first.
As a result, New Zealand became the fourth team into the semi-finals and will face undefeated India in Mumbai on November 15.
World Cup 2023: England end Pakistan’s feeble hopes, India to play New Zealand in first semifinal
A day later, Australia and South Africa will meet in the other semi-final in Kolkata.
Stokes — dropped on 10 by Shaheen off his own bowling — rode his luck during a 76-ball innings.
Root added a 72-ball 60 after England won the toss and batted.
Stokes and Root built on a solid opening stand of 82 between Jonny Bairstow (59) and Dawid Malan (31), taking full advantage of a slow Eden Gardens pitch and some wayward bowling.
Bairstow hit seven boundaries and a six in his 61-ball knock — his second fifty in an otherwise lacklustre performance in the tournament.
Malan was the first to go, miscuing a reverse sweep off spinner Iftikhar Ahmed while Bairstow was caught in the covers off Rauf, Pakistan’s best bowler with 3-64.
Once Stokes, who came out of ODI retirement for the World Cup, got a life he continued to bat like he did during his century against the Netherlands in Pune three days ago, cracking 11 boundaries and two sixes.
He was finally yorked by Shaheen in the 41st over after adding 132 for the third wicket with Root.
Root hit four boundaries in his third half century of the World Cup before he was caught off a leading edge against Shaheen who finished with 2-72.
Harry Brook made 30, with two sixes and as many fours, and Buttler hit 27 with a six and three boundaries as the pair added a quick 45 with England scoring 97 runs in the last ten overs.
Pakistan finished in fifth place in the 10-nation table while England are a further two places down, but still able to qualify for the 2025 Champions Trophy.
(With inputs from AFP)