元军占领长江中游重要门户鄂州后,“沿江诸将多吕氏部曲,皆望风降附”,在吕文焕的招降下,黄州、蕲州、安庆等地守将不战而降。
此时身在两淮的宋朝降将刘整唯恐吕文焕立下头功,一急之下竟然发病而死。听说刘整死了,贾似道来了精神,他于1275年正月亲率南宋最后的精锐十三万人、二千五百艘战船逆江而上,迎击伯颜的大军,决定南宋生死存亡的一战到来了!
2月,宋军抵达芜湖后,非但不积极部署御敌,反而先遣返元军战俘,原来贾似道想故伎重施,向伯颜乞和,但遭拒绝。无奈之下,贾似道只得下令步军指挥使孙虎臣率七万兵马列阵于丁家洲(今安徽铜陵东北长江中),同时命水军统领夏贵率两千五百艘战船横亘江中,他自己率后军驻扎鲁港(今安徽芜湖南)。
伯颜率水陆大军进至丁家洲,与宋军相距数里。伯颜见宋军人数众多,于是决定采用计策。他先让军中作数十个大筏,上置柴草,佯言要焚烧宋舟,使得宋军昼夜严备因而疲惫不堪。伯颜又下令步骑军沿江两岸进攻,同时让战船向宋军冲击,双方展开一场激烈的决战。
在元军回回炮的轰击下,宋军损失惨重。宋军前锋将姜才方与元军接战,前军主将孙虎臣竟弃阵先遁,诸军于是纷纷溃败。元军将领阿术趁机率战船数千艘,乘风急进,突入宋阵,横击宋舰。水战本是宋军的强项,但夏贵恐贾似道督师获胜,而自己因鄂州之败受到责难,竟然不战而逃,直奔庐州。
贾似道听闻前军溃败,惊愕失措,急忙下令收兵,企图乘船逃往扬州,整军再战。不料元军乘胜追杀,宋军不战自溃,溃不成军,纷纷四散奔逃。元军主将伯颜下令全线追击,一直追杀一百五十余里。丁家洲一战以元军完胜而告终,此战元军俘获宋将三十余人,士卒数万,战船一千余艘。本来是场决战,却成了一场大溃败,可以说此战元军几乎不费吹灰之力,就让南宋主力十三万人丧失殆尽。
元军东进至太平州(今安徽当涂),江东运判孟之缙以城降。元军至建康(今南京),宋朝建康留守赵潽弃城而逃,都统司都统制徐王荣等开城请降,元军兵不血刃,占领建康。元军进占建康后,伯颜派兵进攻建康周围的重要城镇,随即攻陷镇江,控制了江东地区,建立起稳固的南进基地。与此同时,为防止两淮宋军南下救援,忽必烈命阿术率军渡江,进围扬州。阿术在扬州东南的瓜洲修造楼橹,缮治战具,又在扬州城外围树栅,修筑坚固的堡垒长围,截断了宋军增援部队,又派水师堵截江面,控制了长江天险,断绝了宋军渡江南救临安的通道。南宋朝廷立国,是以长江为防线,两淮为藩篱,“重兵皆住扬州,临安倚之为重”。元军占领建康,进围扬州,攻占两淮,南宋都城临安完全失去了屏障。元军在建康休整后,兵精粮足,战斗力更加强盛,随时准备攻取临安,处在进攻的有利地位。