鄭成功在鎮江耽擱了11天,兵至南京城下多日又圍而不打,給清軍提供了喘息時間。
南京本來是一座“城大兵單”的戰略要地。在鄭成功出師北征之前,清軍主力大多集中在西南戰場,攻打李定國,無力北顧。盡管南京守將乘鄭軍羊山遇險後的大半年時間加緊了備戰,但仍然沒有重兵集結。直到鄭軍兵臨城下,清軍各地援兵才源源入城。清將管效忠從鎮江逃入南京後,同江南總督郎廷佐急忙向清廷求援,奏書稱:“南都危如累卵,乞發大兵,南下救援撲滅,免致燎原滔天”。順治帝聽到鄭軍圍攻南京的消息,引起巨大震動,甚至極欲撤退至盛京(今沈陽)。受到皇太後訓斥後,轉為暴怒,拔劍大呼禦駕親征。鄭成功獲得了這一重要情報,但沒有乘勢立即攻城,反而說:“似此,南都必降矣!”
七月十一日,郎廷佐與管效忠遣使至鄭軍大營施展緩兵之計。聲稱:“大師到此,即當開門迎入。奈我朝有例:守城者過三十日,城失,則罪不及妻孥。今各官眷口悉在北京,乞藩主寬三十日之限,即當開門投降。”鄭成功信以為真,且趾高氣揚地說:“本藩攻此孤城,不過一腳尖爾!”逐允準守軍寬限30日後再降。
清使離去後,參軍潘庚鍾向鄭成功進言,指出:“此乃緩兵之計,不可憑信,可速攻之!”鄭成功反駁說:“自舟山興師至此,戰必勝,攻必取,彼焉敢緩吾之兵耶?”潘庚鍾想引經據典,說服鄭成功,勸道:“孫子有雲:辭卑者,詐也;無約而請和者,謀也。欲降則降,豈戀內顧?決是城中空虛。”然鄭成功仍是無動於衷。
出師皖南的張煌言,馳書勸說鄭成功急速攻城。一再提醒:“兵貴神速”,“遲拙非策”。
大將甘輝等急不可耐,紛紛來見鄭成功,勸告:“大師久屯城下,師老無功。”
但一切忠告,都被鄭成功拒絕了。他以為南京守軍已成“甕中之鱉”,其投降隻是時間遲早罷了。在統帥的錯誤言行影響下,鄭軍官兵忙於籌備慶賀藩主的35歲生日(七月十四日),前陣統領餘新及其所部,釋戈開宴,以飲酒捕魚為樂。當時,炎熱的天氣灼人,廣大官兵無所事事,營壘常空,鬆懈了鬥誌。鄭成功對此聽之任之,盡情地陶醉於已取得的勝利之中,把主要精力放在拜謁明孝陵、準備慶賀誕辰等項非戰事之上。
形勢的發展越來越不利於鄭軍。清總兵官梁化鳳率領精兵8000,從崇明趕來南京增援,於七月十五日從城東、南門入城。另外,清軍收容附近州府兵3萬人,征集鄉勇2萬人,數日間,南京守兵猛增至5萬餘人。七月十六日,城內守軍派遣一支小隊,殺出儀鳳門,襲擾鄭軍,抓了幾個俘虜即返回城中,這實際上是武裝偵察。梁化鳳日夜在城上觀望、巡察,偶然在城東北角發現屯紮白土山下的鄭軍疲憊散亂。他想起此處原有一座城門,名曰神策門(今稱得勝門),因出入者少,便用土堵塞了。
梁化鳳命人把此門挖開,於二十三日夜三更時分,親率騎兵500,乘鄭軍不備,突然殺出城外,如神兵天降。鄭軍統領餘新所部人不及甲,倉皇迎戰,餘新被俘,兩名副將戰死。
鄭成功急令林勝、陳魁移師神策門外的白土山下,甘輝、張英率精銳設伏於白土山中,陳鵬、蔡祿來往接應,將大本營移至幕府山,準備迎擊清軍出城。
二十四日淩晨,清軍乘鄭軍移營之機,發起強大攻勢。梁化鳳、喀喀木等由陸路,官效忠、紮爾布巴圖魯等由水路,一齊殺出城門,鄭軍匆忙迎戰。梁化鳳在神策門南擊敗楊祖及前來增援的藍衍、楊正部,擊殺藍衍及司馬張應等鄭將。鄭軍擔任接應的陳鵬、蔡祿,因山道不熟,被梁化鳳各個擊破。甘輝、張英不見鄭成功發出約定信號,未敢輕動。陳魁急率身著重甲的“鐵人”兵5000赴援,因山地崎嶇,行動不便,被清軍一一捕殺,陳魁戰死。鄭成功見諸鎮力戰不支,便命潘庚鍾在大本營代理指揮,自帶隨從去江邊調動水師登岸助戰。時值江水退落,戰船無法靠岸,貽誤了戰機。鄭成功一去不返,潘庚鍾不熟悉指揮信號,隻是不停地揮動旗幟。各鎮將不見帥位信號,不敢輕動,互不應援,被清軍各個擊破。潘庚鍾、張英、林勝、張萬裏等將領先後戰死。甘輝殺敵數百後力盡被俘,不屈被殺。戰船500餘艘被清軍燒毀,有數萬官兵傷亡。鄭成功見敗局已定,遂下令各鎮官兵向鎮江方向撤退。