Lesotho beat the 2015 champions Namibia 5-4 on post-match penalties after their quarter-final ended goalless.
But the two goal advantage came under immediate threat when Zambian skipper Donashano Malama committed a clumsy tackle to hand Botswana an immediate route back into the game. But Thabang Sesinyi, who had just come on as a substitute, had his shot saved by Allan Chibwe.
With just over 10 minutes to go, however, Botswana were back in contention when Kabelo Seakanyeng fired home, also with the help of a deflection. Thereafter followed a splendid save from Chibwe to deny Lemponye Tshireletso as Botswana pushed for an equaliser although Zambia might have scored too in the closing stages with Mike Katiba denied by diving Botswana’s keeper Mwampole Masule.
In the second game, Lesotho had two good first half chances but Bokang Sello fired his free kick into the wall and Hlompho Kalake missed from a pass laid back into his path. Poor shooting from Namibia cost them in the second stanza, notably Itamunua Keimuine, who had the goal at his mercy in the 63rd minute.
In the shootout, which followed 90 minutes of football, Lesotho kicked first but had their second effort saved.
But Namibia lost the advantage when they missed to take it to sudden death where goalkeeper Likano Mphuthi came up trumps to save from Ananias Gebhardt and win the match for his team.
On Sunday, the second two quarter-final are also hosted at the Royal Bafokeng Sports Palace when defending champions South Africa take on Tanzania (5pm kick off) and then Swaziland are in action against Zimbabwe (7.30pm).
In Wednesday sem-finals at the Moruleng Stadium, Zambia meet either South Africa or Tanzania and xx are up against either Swaziland or Zimbabwe.
Botswana 1 (Seakanyeng 79’) Zambia 2 (Mwila 10’, Shonga 70’)
Namibia 0 Lesotho 0. Lesotho won 5-4 on penalties.
South Africa vs Tanzania (KO 17h00 local, 15h00 GMT) – Royal Bafokeng Stadium
Swaziland vs Zimbabwe (KO 19h30 local, 17h30 GMT) – Royal Bafokeng Stadium