淮军气势如虹,乘胜进军。同治二年(1863)三月十六日,程学启率领十五营,一马当先,进抵昆山东门下,跨河筑营。昆山城四面大河,地势平坦,吴淞江、娄江横穿东西,分布着淀山湖、阳澄湖、澄湖、傀儡湖等大小湖泊,是江苏省的东大门。太平天国占据后,把昆山、新阳两县合并,改名为昆珊。
这时常胜军已开回松江休整。淮军在城下一连两天,叫骂搦战,但城内太平军并不理会,闭城固守。李鸿章亲带小队,由嘉定驰赴太仓,与李鹤章等人商定,在太仓北门外,派驻重兵,扼守通往常熟、苏州之路,以阻援兵。太仓布置妥当后,于三月二十三日,前往昆山城外,视察前线。
这番行程,十分紧凑,李鸿章自己记叙如下:“二十三日,驰往程学启昆山营次,察度城贼情形,坚踞不出。我军两岸分扎,中搭浮桥,气势尚为联络。二十四、五日,周历娄江、青阳江、吴淞江各河道宜用水战之地,淮扬水师阳利见、成俞卿、张光泰三营分扼水口,与陆军相为依护。二十六日,由水路折往青浦,饬守将滕嗣武加意严防,如苏、昆穷寇乘虚内窜,与现驻千墩水陆各营互为应援。二十七日至松江府城,面商戈登添备攻具,克期赴昆山会剿。是夜,仍驰回上海。”
四月初三,程学启营进逼城根,开炮轰击,昆山之战正式开始——这场战斗,后来成了李鸿章“平吴”大战中的一幕人间悲剧。
守城的太平军进行了顽强的抵抗,李鸿章形容:“炮子往来如织,我军不能仰视。”直到淮军大炮的炮弹全部打光,有一艘轮船被太平军击中,烟火弥江。太平军乘势从南门杀出,直冲东门淮军阵营。程学启率开中、开左两营与奇字营迎战,洋枪齐发,太平军抵敌不住,丢下数百具尸体,退回城里。
初七,又有大股太平军出南门,绕过东门,直扑青阳江一带。程学启派洋枪队前往阻截,水师在江上开炮,猛烈的炮火,把太平军逼回城里。但没多久,太平军又从北门冲出,扑向开字、新中营,并试图在城外高坡上筑营。开字营洋枪队哪里容他站稳脚跟,马上像蚂蚁一样围上来,噼噼啪啪放枪,迫使太平军放弃筑营,又退回城里。