Scotland 234 for 8 (Leask 48, Cross 38, Williams 3-41) beat Zimbabwe 203 (Burl 83, Madhevere 40, Sole 3-33) by 31 runs
Bulawayo: Scotland beat Zimbabwe by 31 runs to end the hosts' hopes of qualifying for the World Cup and move to within one game of the finals.
In what was a must-win game for both sides, Scotland set a total of 234-8 after being put into bat first.
Zimbabwe lost four wickets for 37 runs early into their innings.
And, although Ryan Burl hit an impressive 83 to put the game in the balance, Tendai Chatara was bowled by Safyaan Sharif as the hosts fell short.
Sharif became the first Scot to take 100 international wickets, but it was three early wickets from man of the match Chris Sole that proved crucial.
Scotland will reach the World Cup for a fourth time should they defeat Netherlands on Thursday, while Zimbabwe miss out for the second finals in a row.
Doug Watson's side had finished second in the first round of qualifying behind Sri Lanka for the Super Six series and are now in pole position to progress along with them again with only two teams progressing to the finals.
Scotland started impressively, with Matthew Cross, Brandon McMullen and George Munsey all breaching 30, but a mid-order collapse looked to have handed the momentum to Zimbabwe.
In the end, Mark Watt's tail-end 21 not out off the closing balls proved crucial in setting up a half-decent but reachable target for the hosts.
Sole's early wickets put Zimbabwe under increased pressure, only for home fans to sense the tide had turned as Sikandar Raza, who hit 34, and Burl piled on the runs.
However, after the latter's dismissal, it seemed only a matter of time before Scotland claimed a famous victory.