Chiefs had the first decent attempt of the match after just five minutes through George Maluleka, who curled an effort towards the top corner which was well tipped over the bar by Peter Leeuwenburgh.
Chiefs were making inroads particularly down the left-hand side through Billiat. In the 14th minute, Hendrik Ekstein released the Zimbabwean star with a deft chip over the City defence and Billiat cut inside well but could only fire a tame shot straight at Leeuwenburgh.
Amakhosi took the lead on the half-hour mark. Edmilson Dove gave the ball away sloppily straight to Billiat just outside the box. Billiat played in Bernard Parker down the right-hand side and he squared the ball for Ekstein, whose deflected shot bounced over Leeuwenburgh and in to the back of the net.
Dove was caught in possession once again and almost punished again, but Billiat fired his shot over the bar, before Siphosakhe Ntiya-Ntiy hit the post minutes later.
Middendorp's side were putting City on the ropes. Shortly before half-time, Ntiya-Ntiya headed the ball back across goal to Ekstein, who lashed his shot just wide with City lucky to go in to the break only 1-0 down.
McCarthy's side had the first goal attempt of the second half. Norodien cut inside and laid the ball off to Dove, whose long-range effort was comfortably smothered by Bvuma.
Soon after, City almost equalized. Bradley Ralani showed good pace to break clear down the left-hand flank and delivered an inch-perfect cross to the back post for Zukile Kewuti, whose header unluckily hit the bar.
In the 54th minute, Chiefs' high press worked effectively again and they launched a swift counter-attack with Billiat playing in Parker down the left, who cut inside past his marker but his shot was well blocked by Dove. Parker swung in the resulting corner to the back post which was nodded down by Teenage Hadebe for Dumisani Zuma to bundle in to the net from close range.
City were having the better of the second-half possession but were not creating any clear-cut opportunities. Amakhosi almost put the game beyond doubt in the 77th minute. After another swift counter-attack that went from left to right and back to the left, Parker was put clear through by Ekstein down the left-hand side but skied his effort over the bar from close range.
Soon after, City came the closest they had all game to scoring. Christofer David picked out Kermit Erasmus' run, who found Ralani, who in turn found Gift Links. Links unleashed a powerful effort towards goal which was excellently saved by Bvuma.
Chiefs comfortably closed out the remainder of the match to book their place in the Nedbank Cup semi-finals.
Chiefs: Bvuma, Moleko, Hadebe, Cardoso, Mphahlele, Ntiya-Ntiya, Maluleka, Andrianarimanana , Ekstein, Parker, Billiat.
Subs: Petersen, Booysen, Katsande, Zulu,Moon, Zuma, Castro.
City: Leeuwenburgh, Mkhize, Dove, Seedat, Modise, Ralani,Fielies, Norodien, Mokeke, Erasmus, Kewuti.
Subs; Stephens, Links, Cupido, David, Graham, Mthembu, Martin.